如何在Rails中处理特定用例的多对多关系

时间:2019-02-09 14:02:03

标签: ruby-on-rails

我有三种型号:

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应该为其创建一个新记录。

有什么想法吗?

0 个答案:

没有答案