导轨和类名和外键HAS_ONE(Rails has_one with class name and

2019-07-29 11:46发布

我有,我用两个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 。 谢谢!

Answer 1:

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

这条线(从您发布的代码)表示requesterUser ,而该表users应该包含一列requester_id是向着外键friend_requests记录。 轨道错误消息指出该列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的关系指南上的差异更多信息has_onebelongs_to ,以及如何使用它们。



文章来源: Rails has_one with class name and foreign key