33

我有一个 Rails 模型,我使用两个has_one关系:requesterfriend. 在控制台中我使用:

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_onebelongs_to. 谢谢!

4

1 回答 1

43
has_one :requester, :class_name => "User", :foreign_key => "requester_id"

这一行(来自您发布的代码)表明requester是 a 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.

查看Rails Relation Guide了解更多关于 和 的区别has_one以及belongs_to如何使用它们的信息。

于 2012-05-19T11:30:32.647 回答