33

私は2つのhas_one関係を使用するRailsモデルを持っています: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。ありがとう!

4

1 に答える 1

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

この行(投稿したコードから)は、がであることを示してrequesterおりUser、テーブルにはレコードへの外部キーでusersある列が含まれている必要があります。railsエラーメッセージは、列が存在しないことを示しています(移行によって列を作成する必要があります)。requester_idfriend_requestsrequester_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

于 2012-05-19T11:30:32.647 に答える