G'day伙计们,我在过滤我系统中数千种商品的展示时遇到了问题。根据我们正在构建的系统的规格,我们必须有一个表单,允许人们输入开始日期,然后是几分钟的间隔,以过滤项目的表示。我已经构建了我的帮助函数来返回该间隔期内的所有交易,但我不能在我的生活中正确构建将在索引页顶部返回dateTime值和整数值的表单?
有什么想法吗?我是否必须构建一个单独的模型对象来分配值,或者是否有更简单的方法?
答案 0 :(得分:17)
在索引页面上,您可以创建一个像这样的过滤器表单
<%= form_tag '', :method => :get do %>
<%= text_field_tag :value_one %>
<%= text_field_tag :value_two %>
<%= submit_tag 'Filter' %>
<% end %>
然后,您的表单将在您的页面上使用查询字符串参数执行GET,然后在您的控制器中,您可以查找可能已传递的过滤器参数。
答案 1 :(得分:2)
我喜欢在我的控制器中逐渐构建一个过滤器,即:
def index
filter = []
if params.has_key?("filter")
if !params[:filter][:user_id].blank?
id = params[:filter][:user_id]
filter << ["user_id = #{id.to_i}"]
end
if !params[:filter][:project_id].blank?
id = params[:filter][:project_id]
filter << ["project_id = #{id.to_i}"]
end
if !params[:filter][:change_type_id].blank?
id = params[:filter][:change_type_id]
filter << ["change_type_id = #{id.to_i}"]
end
end
@logs = LogEntry.where(filter.join(" AND ")).order('created_at DESC')
end
如果视图中未选择过滤器(我使用select_tag
表单助手),则数据库查询将返回所有记录。