在form_for中的Rails check_box_tag

时间:2013-11-13 03:46:21

标签: ruby-on-rails params form-for

是否可以在哈希中的Rails中的check_box_tag内传递checked 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]轻松访问它们。 我该怎么做,或者更好的是,有更好的解决方案(我是铁杆新手)?

2 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:0)

您可以使用attr_accessor

处理任何数据库属性和模型
class Thing < ActiveRecord::Base
  attr_accessible :name
  attr_accessor :box_a, :box_b, :box_c
end

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