2

我是 Ruby 和 Rails 的新手。

我做了一个简单的应用程序,其中索引页面显示了一个 Cars 表,其中包含品牌、型号和类型(跑车、SUV、豪华车)的列。

我已经做到了,所以我可以单击列标题并按该列排序

我还在表格上方添加了一个表格,每个汽车类型都有一个复选框,用户可以在其中选中/取消选中复选框并单击“提交”,表格将只显示已选中类型的汽车。

我想要做的是按某个列排序,然后选中一些框/单击提交并显示结果,列表仍然排序和过滤。

现在,我可以排序或过滤,但如果我执行一个操作,我的应用程序会忘记前一个操作。

什么是 RESTful 方式来做到这一点?

我是否应该在会话哈希中保留“设置”,并在每次用户发出新的 HTTP 请求时从中构造一个 URI?

4

2 回答 2

1

在请求 URI 中包含排序/过滤参数有什么问题?例如,当您提交“honda”品牌的过滤器表单时,uri 将类似于/cars?filter[make]=honda. 如果您还包括排序选项,则 uri 可能是/cars?filter[make]=honda&sort_by=make.

在您的控制器内部,您可以通过 params 哈希访问这些:

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 ......您应该动态生成它们)。

于 2013-02-17T07:49:02.317 回答
0

只要用户登录,会话哈希中保存的任何数据都是可用的。当前的 URI 是什么并不重要。如果你想使用params哈希,你只需要破解 URI。

因此,您应该session[:sortBy] = :make在选择排序操作时执行类似操作。然后,无论您当前在控制器中访问的任何位置,都改为params[:sortBy]拉动。session[:sortBy]

我当然在猜测你的符号是什么样的。允许我们查看您自己的一些代码会有所帮助。

于 2013-02-17T06:26:07.253 回答