Ruby on rails 在rails 5的透视表中保存关联

Ruby on rails 在rails 5的透视表中保存关联,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我有一个常见的多对多关系,以下是模型: class Employee < ApplicationRecord has_many :related_professions has_many :professions, through: :related_professions accepts_nested_attributes_for :related_professions end class RelatedProfession < ApplicationRecord

我有一个常见的多对多关系,以下是模型:

class Employee < ApplicationRecord
  has_many :related_professions
  has_many :professions, through: :related_professions

  accepts_nested_attributes_for :related_professions
end

class RelatedProfession < ApplicationRecord
  belongs_to :employee
  belongs_to :profession

  accepts_nested_attributes_for :profession
end

class Profession < ApplicationRecord
  has_many :related_professions
  has_many :employees ,through: :related_professions
end
第一个问题是,如果员工没有任何指定的职业,则表单不会加载这些职业。我必须手动将一个添加到DB中,然后它将填充select

第二个问题是,当我试图通过选择不同的职业来更新员工(以及相关的职业数据透视表)时,它将不起作用,我会得到以下错误:

Related professions profession must exist
我知道许可参数和表单中一定有错误,无法正确构建选择


我感谢你的帮助。提前感谢。

您不需要通过关系创建嵌套属性, 您可以将其作为ID数组传递

class Employee < ApplicationRecord
      has_many :related_professions
      has_many :professions, through: :related_professions
    end

    class RelatedProfession < ApplicationRecord
      belongs_to :employee
      belongs_to :profession
    end

    class Profession < ApplicationRecord
      has_many :related_professions
      has_many :employees ,through: :related_professions
    end
更改强参数以允许
profession\u id
作为数组

def employee_params
  params.require(:employee).permit(:name, profession_ids: [])
end

希望这能解决你的问题

谢谢你的快速回答。这解决了第一个问题,即没有填充“选择职业”,但当我尝试保存分配一个职业的新员工时,它不会将数据存储在RelatedProfessions透视表中。我得到了这个错误:Unpermitted参数::related_professions,这些参数是:
“employee”=>{“name”=>“other”,“related_professions”=>{“professional_id”=>[,“2”]}
@Holland Salazar更新了答案,只需从视图中删除嵌套表单就可以了非常感谢!正如预期的那样!嵌套属性的所有内容都让我感到困惑。祝您好运。
class Employee < ApplicationRecord
      has_many :related_professions
      has_many :professions, through: :related_professions
    end

    class RelatedProfession < ApplicationRecord
      belongs_to :employee
      belongs_to :profession
    end

    class Profession < ApplicationRecord
      has_many :related_professions
      has_many :employees ,through: :related_professions
    end
 <div class="field">
      <%= form.label :professions %>
        <%= rp.collection_select :profession_ids, Profession.all, :id, :name, {}, {multiple: true} %>
    </div>
def employee_params
  params.require(:employee).permit(:name, profession_ids: [])
end