使用collection_select参数进行过滤

时间:2013-04-07 14:22:52

标签: ruby-on-rails ruby-on-rails-3 search filter params

我有一个简单的表单,允许用户根据location_id表单字段中给出的collection_select过滤搜索结果。如果选择了特定位置,我想渲染缩小的结果,如果用户选择默认的“请选择”字段,则渲染所有结果。

此代码适用于不同的位置,但如果用户选择“请选择”字段则无效。控制器中的params[:location_id].blank?无效。

视图

<%= form_tag @city %>
  <%= collection_select 'location_id', nil, @city.locations, :id, :address, prompt: true %>
  <%= submit_tag "sort", :name => nil, class: "btn btn-success travel-button", id: "hotels-radius-search-button" %>
<% end %>

控制器

if params[:location_id].blank?
  ...render all results...
else
  ..render specific results...
end

更新

服务器的回复

选择默认“请选择”选项时的参数 - 不工作

Parameters: {"utf8"=>"✓", "search_radius"=>"6", "location_id"=>[""], "_"=>"1365350127863", "id"=>"75"}

当用户在菜单中选择任何选项时的参数 - 成功

Parameters: {"utf8"=>"✓", "search_radius"=>"6", "location_id"=>["811"], "_"=>"1365350127865", "id"=>"75"}

Parameters: {"utf8"=>"✓", "search_radius"=>"6", "location_id"=>["808"], "_"=>"1365350127865", "id"=>"75"}

1 个答案:

答案 0 :(得分:2)

发表我的回答,因为不能接受评论: - )

collection_select已被使用并正在发送Array

因此建议使用select_tag