我有两个表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
您想要的是:
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"