繁体   English   中英

使用Ruby on Rails设置过滤器

[英]Setting up filters with Ruby on Rails

我正在尝试做一些事情,我认为这应该很简单,但是却找不到正确的答案。 在下面的视图中,我希望能够从以下工程学科之一中进行选择,单击“ Filter按钮。 重新加载页面时,视图中的循环只会添加属于指定过滤器的标记,或者在未应用过滤器的情况下,标记将全部显示。

我以前从未在Rails中进行过任何过滤,因此,我完全迷失了。 我还觉得我需要更改我的route.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());
}

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM