2 つのリレーションを使用する Rails モデルがありますhas_one
:requester
とfriend
。コンソールでは、次を使用します:
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
has_one :requester, :class_name => "User", :foreign_key => "requester_id"
この行(投稿したコードから)はrequester
が でありUser
、テーブルにはレコードへの外部キーとなる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_one
との違いbelongs_to
や使用方法の詳細については、 をご覧ください。