SimpleForm检查现有has_many记录

时间:2014-04-28 21:18:26

标签: ruby-on-rails simple-form

我有两个通过连接表连接的模型:用户和代理商(由AgencyUserRelationships加入)。用户有很多关系,每个关系都有一个代理,但他们不一定与所有代理商有关系。

我想为用户创建一个Simpleform,它将所有代理显示为复选框列表,其中已经检查了现有关系。提交表单会更新/删除现有关系(如果未选中),如果选中则会创建新关系。这听起来像是accepts_nested_attributes_for的工作,但我的尝试失败了(见下文)

User.rb

has_many :agency_user_relationships
accepts_nested_attributes_for: agency_user_relationships

AgencyUserRelationship.rb

belongs_to :user
belongs_to :agency

简单表格代码

= simple_form_for user do |f|
  = f.input :agency_user_relationships, collection: Agency.all, as: :check_boxes, label: t(:agencies)
  = button_tag type: :submit, "Add"

这最终会给我一个表格,每个代理商都有一行(这就是我想要的),但是现有的关系不会被检查。

我看了Simpleforms docs,但是按照这个例子,我只给了一个包含两行的表格来编辑嵌套资源,这不是我想要的,我不会想。

1 个答案:

答案 0 :(得分:0)

事实证明我非常接近。我将f.input改为f.association,Rails知道该怎么做。

它将我的simpleform代码转换为

= simple_form_for user do |f|
  = f.association :agency_user_relationships, as: :check_boxes, collection: Agency.all, label: t(:agencies)
  = button_tag type: :submit, class: 'btn btn-primary controls' do
    = t(:add_agency)

现在,表单显示存在的所有代理,但默认情况下会检查已与我的用户建立关系的代理。其余的是控制器代码。