web-dev-qa-db-ja.com

Rails console Sessionでルートを認識

Blogs_pathのような詳細情報が必要なルーターヘルパーがあるとします。コンソールでその背後にあるマップステートメントを見つける方法を教えてください。

「config/routes.rb」を要求した後でも、生成と認識を試みましたが、認識できないメソッドエラーが発生しました

53
sent-hil

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

ありがとう、ゾビー!

92
Mike Blyth

Rails 3.2アプリのコンソール:

# include routing and URL helpers
include ActionDispatch::Routing
include Rails.application.routes.url_helpers

# use routes normally
users_path #=> "/users"
51
Nick

基本的に(あなたの質問を正しく理解していれば)要約すると、UrlWriterモジュールを含めることになります。

   include ActionController::UrlWriter
   root_path
   => "/"

または、コンソールの呼び出しにアプリを追加することができます。例:

   Ruby-1.9.2-p136 :002 > app.root_path
   => "/" 

(これはすべてRails v。3.0.3)です

34
Sam Figueroa

次のようなエラーが表示される場合

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
3
Mark Swardstrom

プロジェクトディレクトリからroutesコマンドを実行すると、ルーティングが表示されます。

rake routes

これはあなたが念頭に置いていたものですか?

2
Pete