クラス名と外部キーを持つRails has_one 質問する

クラス名と外部キーを持つRails has_one 質問する

2 つのリレーションを使用する 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

ベストアンサー1

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

この行(投稿したコードから)はrequesterが でありUser、テーブルにはレコードへの外部キーとなるusers列が含まれている必要があることを示しています。レールのエラーメッセージには、列が存在しない(を介して作成する必要がある)と記載されています。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_oneとの違いbelongs_toや使用方法の詳細については、 をご覧ください。

おすすめ記事