0

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

resources :projects do
    resources :expenses
end

我是否应该制作自己的比赛声明,例如:

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

然后删除嵌套资源?

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

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

谢谢!

4

1 回答 1

1

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

搜索表单看起来像:

<%= 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

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

于 2012-11-21T20:08:26.907 回答