2012-11-21 37 views
0

我正在使用如下所示的嵌套資源,但我現在需要能夠發送日期範圍參數進行分頁/過濾。我知道關於不超過1個嵌套資源的規則,但我不確定將第三個變量應用於路由的正確方法。Rails嵌套資源 - 需要日期過濾/分頁

resources :projects do 
    resources :expenses 
end 

如果我只是手藝我自己的匹配語句,如:

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

,然後刪除嵌套的資源?

我很擔心發送一個查詢字符串,我將不得不以某種方式將它重新包含在我的所有路徑中,所以我猜測它最適合用路徑處理。

只是不知道我是否在正確的軌道上。

謝謝!

回答

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 

你當然會想一些默認的日期範圍,讓你沒有得到沒有日期參數通過時的例外。