Как работать со многими отношениями для конкретного случая использования в Rails - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть три модели:

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 должен создать для него новую запись.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...