我正在为Order对象创建一个表单,并且该订单包含许多Products,通过名为OrderProducts的连接表.所以,我们有这样的事情:
<% @order = Order.new %>
<% form_for @order do |f| %>
<% @products.each do |product| %>
... want to iterate over products here to build up "order[product_ids][]", with one checkbox per product
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
通常对于每个产品我会有一个check_box_tag,说
<%= check_box_tag "order[product_ids][]", product.id, @order.product_ids.include?(product.id) %>
Run Code Online (Sandbox Code Playgroud)
但是,这一点,虽然工作正常,总觉得有点像警察.我有办法用f.check_box语法吗?重要提示 - 关于有问题的项目我在Rails 2.2.2中工作,因此在rails 2中工作的解决方案将是理想的.
Bra*_*rth 44
Rails <= 2.x(原创)
<% @products.each do |product| -%>
<% fields_for 'product[]' , product do |product_fields| -%>
[...]
<%= product_fields.check_box :id %>
<% end -%>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
Rails> = 3.x(更新)
<% @products.each do |product| -%>
<%= fields_for 'product[]' , product do |product_fields| -%>
[...]
<%= product_fields.check_box :id %>
<% end -%>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
Car*_*arl 31
我知道作者正在寻找版本2的答案,但这是谷歌和我的最热门,但我会更新:
一个人可以做到这一点(我使用4.0,不知道它有多远):
<%= form_for @order do |form| %>
<%= form.collection_check_boxes(:product_ids, Product.all, :id, :labeling_method ) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息:http://edgeapi.rubyonrails.org ...
| 归档时间: |
|
| 查看次数: |
29449 次 |
| 最近记录: |