Rails has_one与类名和外键

时间:2012-05-19 11:13:15

标签: ruby-on-rails activerecord foreign-keys

我有一个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_one替换为belongs_to。谢谢!

1 个答案:

答案 0 :(得分:34)

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

这一行(来自您发布的代码)表明requesterUser,而表users应该包含一个国外的requester_idfriend_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_onebelongs_to之间差异的更多信息,以及如何使用它们。