我正在使用嵌套资源,如下所示,但我现在需要能够发送日期范围参数以进行分页/过滤。我知道关于不超过1个嵌套资源的规则,但我不确定将第三个变量应用于路由的正确方法。
resources :projects do
resources :expenses
end
我应该制作自己的匹配声明,例如:
match '/projects/:project_id/expenses/date/:start_date' => 'expenses#index', :as => 'view_expenses'
然后删除嵌套资源?
我担心发送一个查询字符串,我将不得不以某种方式将它重新包含在我的所有路径中,所以我猜测它最好用路由处理。
不确定我是否走在正确的轨道上。
谢谢!
答案 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
您当然需要一些默认日期范围,以便在没有日期参数传递时不会出现异常。