我正在尝试做一些事情,我认为应该相当简单,但无法弄清楚正确的答案。在下面的视图中,我希望能够从以下工程学科中选择一个,点击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());
}
答案 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)