Rails has_one与类名和外键
我有一个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 "User", :foreign_key => "requester_id" has_one :friend, :class_name => "User", :foreign_key => "friend_id" end
我怎么能这样做? 在belongs_to
关系中,我使用相同的,显然用belongs_to
替换has_one
。 谢谢!
has_one :requester, :class_name => "User", :foreign_key => "requester_id"
此行(来自您发布的代码)表示requester
是User
,并且表users
应该包含一列requester_id
,它是friend_requests
记录的外键。 rails错误消息指出列requester_id
不存在(您必须通过迁移创建它)。
在这种情况下,使用
rails generate migration AddRequesterIdToUsers requester_id:integer
它将生成迁移:
class AddRequesterIdToUsers < ActiveRecord::Migration def change add_column :users, :requester_id, :integer end end
并使用rake db:migrate
运行它们的rake db:migrate
。
有关has_one
和belongs_to
之间差异以及如何使用它们的更多信息,请参阅Rails关系指南 。
- Rails 4.2.0中的简单整数赋值的RangeError应该通过validation捕获
- Rails bug:accepts_nested_attributes_for没有更新我的has_many关联
- 如何按照has_many关系中的对象数对Rails AR.find进行排序
- Rails查找某些参数何时为空白
- 如何validation提交ActiveRecord的单个属性而不是其所有属性?
- 无法加载此类文件 – 1.9 / bcrypt_ext(LoadError)
- Rails ActiveRecord – 有没有一种方法可以在没有id的表上执行操作?
- ActiveRecord查询:按所包含模型的总和排序
- rake db:migrate没有检测到新的迁移?