【问题标题】:rails 3 has_many :through Form with checkboxesrails 3 has_many:通过带有复选框的表单
【发布时间】:2011-06-30 14:10:36
【问题描述】:

之前问过类似的问题。

Rails 3 has_many :through Form

但无法从用户表单中获得与要创建的雇佣关系的关系。

已阅读http://www.justinball.com/2008/07/03/checkbox-list-in-ruby-on-rails-using-habtm/http://millarian.com/programming/ruby-on-rails/quick-tip-has_many-through-checkboxes/(我真的希望它能奏效。)

表单提交,但仅在就业中创建空白记录。

<%= form_for @user do |f| %>
...
<p>
   <% Company.all.each do |company| %>
        <%= check_box_tag :company_ids, company.id, @user.companies.include?(company), :name => 'user[company_ids][]' -%>
     <%= label_tag :companies_ids, company.id %>
   <% end %>
</p>
<p><%= f.submit %></p>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    在表单中包含一个隐藏字段标记,以确保在未选中任何复选框时提交内容。这应该工作,在 :

    <%= hidden_field_tag "user[company_ids][]" %>
    

    【讨论】:

    • 这是处理“未选中复选框”用例的好方法。许多关于处理 has_many :through 关系上的多个复选框的示例都没有提到这一点。
    【解决方案2】:

    我可能错了,但我认为check_box_tag函数的第一个arg是输入的实际名称,所以不是

    check_box_tag :company_ids, company.id, @user.companies.include?(company), :name => 'user[company_ids]'
    

    你可以试试

    check_box_tag 'user[company_ids]', company.id, @user.company_ids.include?(company.id)
    

    让我知道它是否有效!

    【讨论】:

    • 我虽然一开始也是这样,但它是正确的。根据 Millarian 的示例,我的问题是我的控制器中的 @user.attributes = {'company_ids' => []}.merge(params[:user] || {}) 位置错误。对我来说,它是在 if @user.update_attributes(params[:user]) 更新之前和 if @user.save 之前创建。
    • 有没有办法使用f.check_box ...?
    • 如果您有多个复选框,请确保第一个参数是 'user[company_ids][]' 以便表单名称是唯一的。否则它将只取最后一个复选框值。
    • 我无法使用提供的任何语法来解决“只取最后一个复选框值”的问题 - 或者让它通过散布的任何 hidden_​​field 技巧保存“所有未检查”。我最后只是在控制器中手动组装标签值。但如果有人在 Rails4 上阅读这篇文章,我现在使用的是一种更简单的方法:stackoverflow.com/questions/16339869/…
    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2016-02-18
    • 2011-08-02
    • 2012-02-01
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多