我有一个Rails模型,我使用两个has_one
关系:requester
和friend
。在控制台中我使用:
f = FriendRequest.all
f[0].requester
我得ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1
。
我真的不知道如何用类名和指定记录的键指定`has_one'关系。这是我的模特:
class FriendRequest < ActiveRecord::Base
has_one :requester, :class_name => "User", :foreign_key => "requester_id"
has_one :friend, :class_name => "User", :foreign_key => "friend_id"
end
我怎么能这样做?在belongs_to
关系中我使用相同的内容,显然将has_one
替换为belongs_to
。谢谢!
答案 0 :(得分:34)
has_one :requester, :class_name => "User", :foreign_key => "requester_id"
这一行(来自您发布的代码)表明requester
是User
,而表users
应该包含一个国外的requester_id
列friend_requests
记录的关键。 rails错误消息指出列requester_id
不存在(您必须通过migration创建它)。
在这种情况下,请使用
rails generate migration AddRequesterIdToUsers requester_id:integer
它将生成迁移:
class AddRequesterIdToUsers < ActiveRecord::Migration
def change
add_column :users, :requester_id, :integer
end
end
使用rake db:migrate
运行迁移。
请查看Rails Relation Guide,了解有关has_one
和belongs_to
之间差异的更多信息,以及如何使用它们。