如何在单选按钮标记中传递对象?

时间:2011-12-11 03:31:04

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

对于我的表单,我使用的是Product模型:

class Product < ActiveRecord::Base
  attr_accessible :purchase_date, :send_to_data
end

在我的表单上,当我创建多个产品时,我:purchase_date正常工作,但也想让radio_button_tag做同样的事情:

<%= form_tag create_multiple_products_path, :method => :post do %>

  <%= date_select("product", "purchase_date")  %>

   <%= radio_button_tag(:send_to_data, 1) %>
   <%= radio_button_tag(:send_to_data, 0) %>


  <% @products.each_with_index do |product, index| %>
     <%= fields_for "products[#{index}]", product do |up| %>
        <%= render "fields", :f => up %>
     <% end %>
  <% end %>

  <%= submit_tag "Done" %>
<% end %>

这对我不起作用,我的数据库没有标记为false或true。

我认为问题出在"send_to_data"的范围内。与"purchase_date"不同,它没有找到对象(产品)。

{"product"=>{"purchase_date(2i)"=>"12", "purchase_date(3i)"=>"11", "purchase_date(1i)"=>"2011"},
"send_to_data"=>"1", 
"products"=>{"0"=>{"product_name"=>"Test", "price"=>"23", "product_store"=>"13", "exact_url"=>""},
"1"=>{"product_name"=>"", "price"=>"", "product_store"=>"", "exact_url"=>""},
"2"=>{"product_name"=>"", "price"=>"", "product_store"=>"", "exact_url"=>""},
"3"=>{"product_name"=>"", "price"=>"", "product_store"=>"", "exact_url"=>""},
"4"=>{"product_name"=>"", "price"=>"", "product_store"=>"", "exact_url"=>""}}, "commit"=>"Done"}

有没有办法将它映射到对象,就像购买日期一样?

2 个答案:

答案 0 :(得分:8)

据我所知,你混淆了FormHelperFormTagHelper。 根据文档

,您可以使用Form标签帮助程序
  

(FormTagHelper)提供了许多方法来创建不依赖的表单标记   在分配给模板的Active Record对象上,如FormHelper。

这意味着您需要使用基于ActiveRecord的表单使用FormHelper(及其radio_button辅助方法)。

使用radio_button_tag表单标记帮助程序的代码

<%= radio_button_tag(:send_to_data, 1) %>
<%= radio_button_tag(:send_to_data, 0) %>

生成以下HTML:

<input id="send_to_data_1" name="send_to_data" type="radio" value="1" />
<input id="send_to_data_0" name="send_to_data" type="radio" value="0" />

代码radio_button形成帮助

<%= radio_button("product", :send_to_data, 1) %>
<%= radio_button("product", :send_to_data, 0) %>

产生

 <input id="product_send_to_data_1" name="product[send_to_data]" type="radio" value="1" />
 <input id="product_send_to_data_0" name="product[send_to_data]" type="radio" value="0" />   

希望这有帮助!

答案 1 :(得分:3)

首先查看此页面form_helpers,此处应采用正确的方式

<%= radio_button_tag(:send_to_data, 1) %>
<%= radio_button_tag(:send_to_data, 0) %>