Это может быть новичок, но сегодня это действительно озадачило меня. У меня есть 3 модели: Play, пользователь и Works_onПроблемы, связанные с созданием has_many через отношение (Rails 4)
приложение/модели/play.rb
class Play < ActiveRecord::Base
has_many :works_on
has_many :users, through: :works_on, :foreign_key => 'user_id'
end
приложение/модели/user.rb
class User < ActiveRecord::Base
has_many :works_on
has_many :plays, through: :works_on, :foreign_key => 'play_id'
end
приложение/модель/works_on.rb
class WorksOn < ActiveRecord::Base
belongs_to :user
belongs_to :play
end
Когда я пытаюсь запустить
<%= @play.users.each{|user| user.first_name } %>
в приложение/просмотров/пьесах/show.html.erb, я получаю ошибку
SQLite3::SQLException: no such column: works_ons.play_id: SELECT "users".* FROM "users" INNER JOIN "works_ons" ON "users"."id" = "works_ons"."user_id" WHERE "works_ons"."play_id" = ?
Я попытался создать миграцию вручную добавить внешние ключи к моделям, но не смогли получить его работать. Любая помощь приветствуется.
Почему вы явно указываете внешний ключ, даже если вы сделали это с помощью соглашений RoR? Почему вы не предпочитаете ассоциацию has_and_belongs_to_many?, Если вы не хотите явно создавать объекты класса WorksOn? – RockStar
Я хотел бы добавить атрибут (роль/ответственность) к отношению work_on. –