Blogs_pathのような詳細情報が必要なルーターヘルパーがあるとします。コンソールでその背後にあるマップステートメントを見つける方法を教えてください。
「config/routes.rb」を要求した後でも、生成と認識を試みましたが、認識できないメソッドエラーが発生しました
Zobie's Blog には、URLからコントローラー/アクションへのマッピングとその逆を手動で確認する方法を示す良い要約があります。たとえば、
r = Rails.application.routes
ルートオブジェクトにアクセスするには(2年前のZobieのページでは、ActionController::Routing::Routes
、しかしそれはRails.application.routes
)。その後、URLに基づいてルーティングを確認できます。
>> r.recognize_path "/station/index/42.html"
=> {:controller=>"station", :action=>"index", :format=>"html", :id=>"42"}
特定のコントローラー/アクション/パラメーターの組み合わせに対して生成されるURLを確認します。
>> r.generate :controller => :station, :action=> :index, :id=>42
=> /station/index/42
ありがとう、ゾビー!
Rails 3.2アプリのコンソール:
# include routing and URL helpers
include ActionDispatch::Routing
include Rails.application.routes.url_helpers
# use routes normally
users_path #=> "/users"
基本的に(あなたの質問を正しく理解していれば)要約すると、UrlWriterモジュールを含めることになります。
include ActionController::UrlWriter
root_path
=> "/"
または、コンソールの呼び出しにアプリを追加することができます。例:
Ruby-1.9.2-p136 :002 > app.root_path
=> "/"
(これはすべてRails v。3.0.3)です
次のようなエラーが表示される場合
ActionController::RoutingError: No route matches
動作するはずの場所では、Rails gemまたはSpreeがルートを追加する場所で行うような何かを行うエンジンを使用している場合があります。
Spreeの場合、これはroutesファイルにあります
Spree::Core::Engine.routes.prepend do
...
end
そして、@ mike-blytheが示唆するように動作するには、generate
またはrecognize_path
。
r = Spree::Core::Engine.routes
プロジェクトディレクトリからroutesコマンドを実行すると、ルーティングが表示されます。
rake routes
これはあなたが念頭に置いていたものですか?