Rails has_one与类名和外键

pme*_*ino 29 activerecord ruby-on-rails foreign-keys

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

f = FriendRequest.all
f[0].requester
Run Code Online (Sandbox Code Playgroud)

我得到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
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?在一段belongs_to关系中,我使用相同的,明显替换has_onebelongs_to.谢谢!

Bal*_*ick 35

has_one :requester, :class_name => "User", :foreign_key => "requester_id"
Run Code Online (Sandbox Code Playgroud)

此行(来自您发布的代码)表示该行requester是a User,并且该表users应包含一列requester_id作为friend_requests记录的外键.rails错误消息指出该列requester_id不存在(您必须通过迁移创建它).

在这种情况下,使用

rails generate migration AddRequesterIdToUsers requester_id:integer
Run Code Online (Sandbox Code Playgroud)

它将生成迁移:

class AddRequesterIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :requester_id, :integer
  end
end  
Run Code Online (Sandbox Code Playgroud)

然后用它们运行它们rake db:migrate.

看看Rails的关系指南对之间的差异的更多信息has_one,并belongs_to,以及如何使用它们.