我有三种型号:
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
在尝试提交表单时,路轨给了我一个错误,我不太了解:
Couldn't find Profession with ID=1 for User with ID=5
这是正确的,但是在这种情况下,Rails应该为其创建一个新记录。
有什么想法吗?