Rails嵌套资源 - 需要日期过滤/分页

时间:2012-11-21 19:22:06

标签: ruby-on-rails ruby-on-rails-3

我正在使用嵌套资源,如下所示,但我现在需要能够发送日期范围参数以进行分页/过滤。我知道关于不超过1个嵌套资源的规则,但我不确定将第三个变量应用于路由的正确方法。

resources :projects do
    resources :expenses
end

我应该制作自己的匹配声明,例如:

  match '/projects/:project_id/expenses/date/:start_date' => 'expenses#index', :as => 'view_expenses'

然后删除嵌套资源?

我担心发送一个查询字符串,我将不得不以某种方式将它重新包含在我的所有路径中,所以我猜测它最好用路由处理。

不确定我是否走在正确的轨道上。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您希望通过params哈希将日期传递给控制器​​。你可以这样做,而不必弄乱你的路径。我不确定你是如何过滤日期的,但是让我们在你的费用索引页面上说你有一个搜索表单,可以按月和按年过滤。

搜索表单如下所示:

<%= form_tag(project_expenses_path(@project) do %>
  <%= label_tag(:search_date, "Search:") %>
  <%= date_select("expense", "date", :discard_day => true %>
  <%= submit_tag("Find") %>
<% end %>

然后你的费用控制器看起来像:

class ExpensesController < ApplicationController
    def index
      @project = Project.find(params[:id])
      @expenses = #find the expenses by querying the db using params[:expense][:date]
    end
 end

您当然需要一些默认日期范围,以便在没有日期参数传递时不会出现异常。