【问题标题】:Rails form multiple checkboxes for associated modelRails 为关联模型形成多个复选框
【发布时间】:2016-02-10 12:23:55
【问题描述】:

我正在创建一个应用程序,其中可以使用创建客户详细信息并允许根据可以提供所需服务的分支创建“推荐”的表单进行“提交”

class Submission < ActiveRecord::Base
  has_many :referrals, :inverse_of => :submission, dependent: :delete_all
  accepts_nested_attributes_for :referrals, :allow_destroy => true
end

class Referral < ActiveRecord::Base
  belongs_to :submission
end

class Branch < ActiveRecord::Base
  has_many :referrals
end

提交控制器:

def new
  @submission = Submission.new
  @submission.build_client
  @submission.client.build_address
  @submission.referrals.build
end

def submission_params
  params.require(:submission).permit(:consent, :user_id, client_attributes:
    [:client_id, :first_name,
      address_attributes:
        [:first_line, :second_line,]
    ],
    referrals_attributes:
      [:branch_id]
  )
end

提交表格:

<%= form_for(@submission) do |f| %>
  <%= f.fields_for :referrals do |referral| %>
    <%= render 'referral_fields', f: referral %>
  <% end %>
<% end %>

_referral_fields.html.erb:

    <% Branch.all.where(referrable: true).each do |branch| %>
       <label>
          <%= check_box_tag 'branch_ids[]', branch.id %>
          <%= branch.name %>
       </label>
    <% end %>

我想要的是为每个可引用分支设置复选框。当一个分支被勾选并创建提交时,将为该分支创建一个推荐。但是,当我提交表单时,我收到“推荐人不能为空”的验证错误。知道为什么这不起作用吗?

非常感谢任何帮助

【问题讨论】:

  • 尝试将&lt;%= check_box_tag 'branch_ids[]', branch.id %&gt;更改为&lt;%= f.check_box 'branch_id', branch.id %&gt;
  • 嗨。刚刚试了一下,还是一样的错误
  • 很抱歉没有完全得到您的更改。我得到“1:Fixnum 的未定义方法‘合并’”

标签: ruby-on-rails forms ruby-on-rails-4 activerecord


【解决方案1】:

使用collection_check_boxes

<% # _referral_fields.html.erb %>
<%= f.collection_check_boxes(:branch_ids, Branch.where(referrable: true), :id, :name) do |b|
  b.label { b.check_box } # wraps check box in label
end %>

您需要将submission[referrals_attributes][branch_ids] 列入白名单,而不是branch_id

def submission_params
  params.require(:submission)
    .permit(
      :consent, 
      :user_id, 
      client_attributes: [
        :client_id, 
        :first_name,
        address_attributes: [
          :first_line, :second_line,
        ]
    ],
    referrals_attributes: [:branch_ids]
  )
end

已编辑。

但是,要实现这一点,您需要在“推荐”和“分支”之间建立关系。在这种情况下,您可以使用 has_and_belongs_to_many (HABTM) 或 has_many though: (HMT) 关系。

Choosing Between has_many :through and has_and_belongs_to_many

class Referral < ActiveRecord::Base
  belongs_to :submission
  has_and_belongs_to_many :branches
end

class Branch < ActiveRecord::Base
  has_and_belongs_to_many :referrals
end

您还需要创建一个连接表:

rails g migration CreateBranchReferralJoinTable branch referral

【讨论】:

  • 我得到“#<0x007f33d537cbb0>
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2014-07-22
  • 1970-01-01
  • 2018-01-05
相关资源
最近更新 更多