1

ルートとアクションに関連して最近見つけたレールには奇妙な動作があります。具体的には、レール 2.3.5にあります。コントローラーがあります。それをユーザーと呼びましょう。ルートでは、Users をリソースとして宣言します。

map.resources :users

コントローラー内には、標準アクションがあります: index, show, edit, update & destroy. また、特定の要件を満たすために他のアクションを追加しました。

def generated_pdf_report
    # do something
end

問題は、 page に移動すると/users/generated_pdf_report、コンソールに次のように表示されることです。

Processing UsersController#show (some timestamps) [GET]
  Parameters: {"action"=>"show", "id"=>"generated_pdf_report", "controller"=>"users"}

ご覧のとおり、サーバーはリクエストを methodshowではなくmethod にルーティングしますgenerated_pdf_report興味深いのは、同様のアクションを持つ他のコントローラーがあり、正常に動作していることです。

上記の問題の解決策は簡単です。追加されたフィードがリソースの上にあることを確認してください。

map.feed 'users/generated_pdf_report', :controller => 'users', :action => 'generated_pdf_report'
map.resources :users

私の質問は次のとおりです。レールがそのように動作する理由を知っている人はいますか? 上記の解決策はちょっとずさんです。上記のような問題のベストプラクティスは何だと思いますか.

4

2 に答える 2

0

Rails 2ルーティングガイドで概説されているように、次のように収集ルートを追加できます。

map.resources :users, :collection => { :generated_pdf_report => :get }
于 2012-06-14T07:20:04.920 に答える
0

レールが見たとき

/users/generate_report

これは、id が generate_report であるユーザーを表示するために使用するパスとまったく同じです。したがって、別の方法で指示していないと仮定すると、それが実行されます。

あなたが書いたもののより短い代替案は

resources :users, :collection => {:generate_report => :get}

/users/generate_report への GET を generate_report アクションにマップするようにレールに指示します

于 2012-06-14T07:25:20.393 に答える