Вопрос по ruby-on-rails – Rails has_one с именем класса и внешним ключом

28

У меня есть модель 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 & apos; связь с именем класса и ключом, который определяет запись. Это моя модель:

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   ответ
33
has_one :requester, :class_name => "User", :foreign_key => "requester_id"

requester этоUserи столusers должен содержать столбецrequester_id это внешний ключ кfriend_requests записей. В сообщении об ошибке rails говорится, что столбец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и как их использовать.

Похожие вопросы