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

Lea*_*RoR 7 ruby ruby-on-rails ruby-on-rails-3

对于我的表格我使用我的Product模型:

class Product < ActiveRecord::Base
  attr_accessible :purchase_date, :send_to_data
end
Run Code Online (Sandbox Code Playgroud)

在我的表单上: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 %>
Run Code Online (Sandbox Code Playgroud)

这对我不起作用,我的数据库没有标记为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"}
Run Code Online (Sandbox Code Playgroud)

有没有办法将它映射到对象,如购买日期呢?

Ali*_*kau 8

据我所知,你混淆了FormHelperFormTagHelper.根据文档,您使用Form标签助手

(FormTagHelper)提供了许多创建表单标记的方法,这些方法不依赖于像FormHelper那样分配给模板的Active Record对象.

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

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

<%= radio_button_tag(:send_to_data, 1) %>
<%= radio_button_tag(:send_to_data, 0) %>
Run Code Online (Sandbox Code Playgroud)

生成以下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" />
Run Code Online (Sandbox Code Playgroud)

radio_button代码形成帮助

<%= radio_button("product", :send_to_data, 1) %>
<%= radio_button("product", :send_to_data, 0) %>
Run Code Online (Sandbox Code Playgroud)

产生:

 <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" />   
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!