替换'collection_select,:multiple =>真正'在Rails中使用多个'check_box'选项

时间:2010-11-29 02:19:53

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

如何使用collection_select选项列表替换:multiple => truecheck_box},以便集合中的每个对象都有check_box选项?

是否有优雅方式使用表单构建器(即不使用*_tag帮助程序)实现此方法?我想尽可能地依靠ActiveRecord的内置功能......

2 个答案:

答案 0 :(得分:1)

我认为没有一种内置的“优雅”方式来做到这一点。

这个railscast应该可以帮助您:

答案 1 :(得分:0)

你可以这样做(例如使用HAML)。

%fieldset
  Colors I like
  - %w[red blue].each do |color|
    = f.label color 
    = f.check_box :colors_liked, {multiple: true}, color, nil

最后的nil选项可以防止Rails使用0的相同名称构建隐藏的复选框,如果您要进行多项选择,这绝对不是您想要的。

这会产生:

<label for="colors_liked_red">Red</label>
<input id="my_form_colors_liked_red" \
  name="my_form[colors_liked][]" type="checkbox" value="red">

<label for="colors_liked_blue">Blue</label>
<input id="my_form_colors_liked_blue" \
  name="my_form[colors_liked][]" type="checkbox" value="blue">

提交表单时,参数将包含已检查选项的值数组。