У меня есть три модели:
class User < ApplicationRecord
has_many :user_professions
has_many :professions, through: :user_professions
has_many :interested_professions, -> { where(interested:true) }, class_name: "UserProfession"
end
class UserProfession < ApplicationRecord
belongs_to :user
belongs_to :profession
end
class Profession < ApplicationRecord
has_many :user_professions
end
Отношения между пользователем и профессией являются фиксированными, поэтому у пользователя есть, например, 3 связанные профессии.Они не могут измениться и назначаются программно.Пока все просто.
То, что я сейчас хотел бы сделать, это использовать одну и ту же таблицу соединений для управления списком профессий, которые интересуют пользователя. Я думаю, что я смогу сделать это через те же отношения.
Для этого конкретного отношения мне нужно либо обновить интересующий атрибут, если отношение уже существует, либо создать новое отношение в таблице UserProfession.Я застрял только в том, как сделать форму.
Я попробовал это:
= simple_form_for(@user) do |f|
- @professions.each do |p|
= f.simple_fields_for :professions, p do |prof|
= prof.simple_fields_for :user_professions, @user.user_professions.find_or_initialize_by(profession: p) do |user_prof|
= user_prof.input :id
= user_prof.input :interested, as: :boolean, label: s.description
= f.submit
Rails выдает мне ошибку при попытке отправить форму, чего на самом деле нетпонять:
Couldn't find Profession with ID=1 for User with ID=5
Что правильно, но в этом случае Rails должен создать для него новую запись.
Есть идеи?