使用collection_select或select或select_tag

时间:2011-03-16 14:23:54

标签: ruby-on-rails

(注意:我已阅读http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails,但仍然不知道该选择什么)

我有一个将用作搜索过滤器的表单(方法是get)。

<%= form_tag(reports_courses_allocated_path, :method =>'get') %>
<%= collection_select(:course, :id, @courses, :id, :title, :include_blank => "All Courses") %>
</form>

上面为标签生成了我想要的输出,但没有“selected”参数,我可以在其中传递params值。我也不喜欢名称为course [id]的事实,我宁愿将其命名为course_id

我能做到:

<%= select_tag(:course_id, raw("<option>All Courses</option>") + options_from_collection_for_select(@courses, :id, :title, params[:course_id])) %>

但我不喜欢我连接选项的事实,但这可能是我最好的选择。

有任何意见/建议吗?

1 个答案:

答案 0 :(得分:2)

它必须是在您的案例中设置“已选择”的参数值吗? collection_select的“selected”值基于@ course.id的值 - 您可以确保@course表示应该选择的值。

至于名称,即使在编写自己的HTML时,我也会坚持使用Rails默认值。它决定了参数如何进入你的行动。如果你的元素有名称课程[id],课程[名称],课程[类型]等,那么参数就是

{ :course => { :id => xx, :name => xx, :type => xx } }

这很方便因为你可以打电话

Course.new(params[:course])

此外,您无需使用自己的HTML表单标记关闭表单。方法form_tag采用一个块:

<%= form_tag('/posts') do -%>
  <div><%= submit_tag 'Save' %></div>
<% end -%>

最后......我之前使用了select_tag并建立了一个选项列表。它可能变得丑陋但你可以在视图助手中的方法中构建它,它不会弄乱你的rhtml以及它可以进行单元测试。