has_one关联未将方法添加到归属类

问题描述 投票:0回答:1

我有两个表User和UserToken。用户has_one: token和用户令牌belongs_to :user。我的印象是,这会将UserToken#User方法添加到UserToken类。但是,我得到:

对于'#',未定义的方法'user'与以下'UserToken.where(user_id:1).user

我不正确理解该关联,或者我没有正确设置它吗?

UsersController:

  def get
    user = UserToken.where(user_id: 1).user

    render json: user.to_json
  end

用户模型:

class User < ApplicationRecord
  has_one :user_token
end

UserToken模型:

class UserToken < ApplicationRecord
  belongs_to :user
end

迁移:

    def change
        create_table :users do |t|
      # This id comes from Auth0
      t.datetime :date
      t.timestamp :updated_at
      t.timestamp :created_at
    end

    create_table :user_tokens do |t|
      t.belongs_to :user
      # This comes from plaid when a user signs in
      t.string :token
      t.timestamp :updated_at
      t.timestamp :created_at
    end
  end

模式:

ActiveRecord::Schema.define(version: 2019_09_19_004350) do

  create_table "user_tokens", force: :cascade do |t|
    t.bigint "user_id"
    t.string "token"
    t.datetime "updated_at"
    t.datetime "created_at"
    t.index ["user_id"], name: "index_user_tokens_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.datetime "date"
    t.datetime "updated_at"
    t.datetime "created_at"
  end
end
ruby-on-rails ruby activerecord associations
1个回答
0
投票

您想要的是:

UserToken.where(user_id: 1).first.user

或更好的是:

UserToken.find_by(user_id: 1).user

由于#where返回了ActiveRecord::Relation,并且ActiveRecord关系没有#user方法,因此出现“未定义的方法”错误。

UserToken.where(user_id: 1).class.name
#=> "ActiveRecord::Relation"
UserToken.where(user_id: 1).first.class.name
#=> "UserToken"
© www.soinside.com 2019 - 2024. All rights reserved.