我是Ruby和Rails的新手。
我做了一个简单的应用程序,其中索引页面显示一个Cars表,其中包含make,model和type(sportscar,SUV,luxury)列。
我已经做到了,所以我可以点击列标题并按该列排序
我还在表格上方添加了一个表格,其中包含每种车型的复选框,用户可以选中/取消选中复选框并单击“提交”,表格将仅显示已检查类型的车辆。
我希望能够做的是按一些列排序,然后选中一些框/点击提交并显示结果,列表仍然排序并过滤。
现在,我可以排序或过滤,但如果我执行一个操作,我的应用程序会忘记上一个操作。
执行此操作的RESTful方式是什么?
我应该在会话哈希中保留'settings',并在每次用户发出新的HTTP请求时构建一个URI吗?
答案 0 :(得分:1)
在请求URI中包含排序/过滤器参数有什么问题?例如,当您为“honda”的make提交过滤器表单时,uri将类似于/cars?filter[make]=honda
。如果您还包含排序选项,则uri可以是/cars?filter[make]=honda&sort_by=make
。
在您的控制器中,您可以通过params hash访问这些:
class CarsController < ApplicationController
def index
@filter = params[:filter] || {}
@order = params[:sort_by] || "created_at"
@cars = Car.where(@filter).order(@order)
end
end
您可以通过在视图中包含路径助手中的参数来生成这些uri:
link_to "Only show hondas", cars_path(:sort_by => @order, :filter => {:make => "honda"})
link_to "Sort by year", cars_path(:sort_by => :year, :filter => @filter)
这样,除非您明确更改请求,否则@filter和@order将在请求之间“保持”。 (这些链接不是DRY ......你应该动态生成它们。)
答案 1 :(得分:0)
只要用户登录,会话哈希中保存的任何数据都是可用的。当前URI的大小并不重要。如果您想使用params
哈希,则只需要破解URI。
因此,每当选择排序操作时,您都应该执行session[:sortBy] = :make
之类的操作。然后,无论您当前在控制器中访问params[:sortBy]
,请改为session[:sortBy]
。
我当然猜测你的符号是什么样的。允许我们看一些你自己的代码会有所帮助。