ルートとアクションに関連して最近見つけたレールには奇妙な動作があります。具体的には、レール 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
私の質問は次のとおりです。レールがそのように動作する理由を知っている人はいますか? 上記の解決策はちょっとずさんです。上記のような問題のベストプラクティスは何だと思いますか.