使用Ruby on Rails设置过滤器

时间:2014-04-15 22:39:44

标签: ruby-on-rails ruby

我正在尝试做一些事情,我认为应该相当简单,但无法弄清楚正确的答案。在下面的视图中,我希望能够从以下工程学科中选择一个,点击Filter按钮。当页面重新加载时,视图中的循环只会添加落在指定过滤器下的标记,或者在没有应用过滤器的情况下,它们都将显示。

我之前从未在rails中进行任何过滤,因此,我完全迷失了。我还觉得我需要改变我的routes.rb文件以适应过滤器可能导致的额外路由。

控制器

class DynamicPagesController < ApplicationController
  def map
    @fields = ['Software Engineering',
        'Mechanical Engineering', 
        'Electrical Engineering',
        'Aerospace Engineering',
        'Civil Engineering',
        'Chemical Engineering',
        'Architectural Engineering']
  end
end

查看

<%= select(:primary_field, :id, @fields) %>
<%= button_to "Filter", map_path, :method => :get, class: "btn btn-primary" %>

...

for (var i = 0; i < companies.length; i++){
    markers.addLayer(new L.Marker([companies[i].latitude, companies[i].longitude]).bindPopup(companies[i].popup, { maxHeight:150 }).openPopup());
}

1 个答案:

答案 0 :(得分:1)

在控制器中,您可以检查过滤器参数是否存在,并根据值进行过滤:

if params[:filter].present?
    # This will apply the filter
    Model.where(attribute: params[:filter])
else
    # This will return all records
    Model.all
end

由于您在没有选择任何选项时有标准选择,因此它将返回所有记录。如果默认情况下不显示空白选项,则可以通过将allow_blank: true添加到选择字段来强制执行此操作:

select(:primary_field, :id, @fields, allow_blank: true)