[英]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.