0

以下に示すようにネストされたリソースを使用していますが、ページ付け/フィルタリングのために日付範囲パラメーターを送信する機能が必要になりました。ネストされたリソースは1つだけであるというルールは知っていますが、3番目の変数をルートに適用する適切な方法がわかりません。

resources :projects do
    resources :expenses
end

次のように、自分の一致ステートメントを作成する必要があります。

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

次に、ネストされたリソースを削除しますか?

クエリ文字列を送信することを懸念しています。何らかの方法ですべてのパスにクエリ文字列を再含める必要があるため、ルートで処理するのが最適だと思います。

私が正しい方向に進んでいるかどうかはわかりません。

ありがとう!

4

1 に答える 1

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

もちろん、日付パラメータが渡されないときに例外が発生しないように、デフォルトの日付範囲が必要になります。

于 2012-11-21T20:08:26.907 に答える