1

是否可以在哈希内的Rails中传递checked check_box_tags的值?form_for

这是表单的一个非常通用的基本版本:

<%= form_for(:object, :url => { :action => 'create', :id => params[:id]}) do |f| %>
  <p>Field_a: <%= f.text_field(:field_a) %></p>
  <p>Field_b: <%= f.text_field(:field_b) %></p>
  <p>Field_c: <%= f.text_field(:field_c) %></p>
  <p>Check boxes:</p>
    <% check_box_choices_object_array.each do |s| %>
      <%= check_box_tag(s.name, 1, false) %>
      <%= .name %><br />
    <% end %>
    <%= submit_tag("Create") %>
<% end %>

大致输出:

Field_a ___________________
Field_b ___________________
Field_c ___________________
Check boxes:
[] box_a
[] box_b
[] box_c
[] box_d
[] box_e
[] box_f
[] box_g

我的问题是,由于可用的复选框不是数据库中对象表中的实际字段(即我没有check_box(:field)在表单中使用),因此每个选中的复选框都作为单独的参数传递(即"box_a" => "1", "box_b" => "1", "box_e" => "1")。我希望他们这样通过:

:checked_boxes => {"box_a" => "1", "box_b" => "1", "box_e" => "1"}

这样,我可以使用params[:checked_boxes]. 我该怎么做,或者更好的是,有没有更好的解决方案(我是 Rails 新手)?

4

2 回答 2

0

你可以处理没有数据库属性和模型使用attr_accessor

class Thing < ActiveRecord::Base
  attr_accessible :name
  attr_accessor :box_a, :box_b, :box_c
end

这样您就可以在表单中调用这些属性。

于 2013-11-13T04:10:53.553 回答
0

如果您将复选框迭代器包装在标签中,我认为您会得到您想要的结果fields_for :checked_boxes- 或者至少让您接近您想要的结果。

<%= form_for(:object, :url => { :action => 'create', :id => params[:id]}) do |f| %>
  <p>Field_a: <%= f.text_field(:field_a) %></p>
  <p>Field_b: <%= f.text_field(:field_b) %></p>
  <p>Field_c: <%= f.text_field(:field_c) %></p>
  <p>Check boxes:</p>
    <%= f.fields_for :checked_boxes do |cb| %>
      <% check_box_choices_object_array.each do |s| %>
        <%= cb.check_box(s.name, 1, false) %>
        <%= .name %><br />
      <% end %>
    <% end %>
  <%= submit_tag("Create") %>
<% end %>
于 2013-11-13T04:04:58.927 回答