我有一个包含需要过滤的巨大分页记录列表的视图。
用户可以通过几种不同的方式按记录进行过滤(例如“已保存”记录、“读取”记录和“标记已删除”记录),我希望他们能够combine这些过滤器以任何可能的方式。
我目前的、有缺陷的、不起作用的方法。除非所有参数均已指定且有效,否则下面的代码不会产生任何结果:
#view. Set the 'se' filter to true; leave all others as is
<%= link_to list_url(:id=>params[:id], :se=>"true", :st=>params[:st], :re=>params[:re]) do %>
<div class="button">Toggle SE</div>
<% end %>
#controller query. Add whichever params are passed into the conditions for the new page.
#query is paginated and sorted
@records = Record.where("user_id IN (?) AND see = ? AND star = ? AND delete = ? AND like = ?", @users.select("id"), params[:se], params[:st], params[:re]).paginate :page => params[:page], :order => (sort_column + " " + sort_direction)
创建这个过滤系统的最佳方法是什么?
我想客户端排序会比每次都要求服务器参与要快 - 有没有一种简单的 AJAX 方法来完成这种事情?想象一下用户可以使用的过滤器打开和关闭任意组合。
尝试这个:
conditions = {:user_id => @users.select("id")}
{
:se => :see,
:st => :star,
:del => :delete
}.each{|k1, k2| conditions[k2] = params[k1] unless params[k1].blank?}
@records = Record.where(conditions).paginate(...)
The conditions
哈希将根据中存在的值进行填充params
hash.
Edit 1
您可以组合条件哈希和数组。
@records = Record.where(conditions).where(
":created_at > ?", Date.today - 30).paginate(...)
您可以通过指定将 userid 条件更改为您想要的任何内容
conditions[:user_id] = @user.id
在上面的语句中,如果RHS是一个数组,rails会自动生成IN
条款。否则,相等性检查(=
)执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)