Rails:コンソールからパスヘルパーの出力を確認する


288

Railsは、ルートのヘルパーを作成する名前付きルートで一連の魔法を定義します。場合によっては、特にネストされたルートの場合、特定のルートヘルパーメソッドの呼び出しで取得するURLを追跡するのが少し混乱することがあります。Rubyコンソールを使用して、特定のヘルパー関数が生成するリンクを確認することは可能ですか?たとえば、post_path(post)のような名前の付いたヘルパーがある場合、生成されるURLを確認したいとします。

回答:


422

rake routes直接表示することができます。

Railsコンソールでは、を呼び出すことができますapp.post_path。これはRails〜= 2.3および> = 3.1.0で機能します。


7
私のコメントのフォローアップで、あなたが使用している場合、これはrails 3コンソールから可能であるようです。まず、app.get "/" 必要なメソッドをinstance_evalのように呼び出すことで、偽のリクエストをアプリオブジェクトに貼り付け ます。例: app.instance_eval{ post_path(post) }
チュバス

上記のChubasのコメントはRails 3で機能しました。これはテストを作成するときに非常に役立つので、ルートが正しくないことを確認するために1分待つ必要はありません。また、get呼び出しとpost呼び出しをテストすることもできます。最初にapp.getを呼び出す必要はありません。
B 7

7
app.teh_pathはRails 4.0でも機能し、メインアプリケーションパスからエンジンパスを分離するのに役立ちます。
nurettin 2013

5
たとえばmount Spree::Core::Engine, :at => '/'、エンジンをマウントする場合、のようにエンジン名を介してパスにアクセスしますapp.spree_core_engine.some_path。または、「engine_name」がこのコードのよう異なるよう構成されている場合は、次のようにますapp.spree.some_path
ジョーダンブロー2014

私は追加する必要がありましたhostようなので、パラメータを:app.article_url(my_article, host: 'mydomain.com')
Besi

352

あなたもすることができます

include Rails.application.routes.url_helpers

コンソールセッション内からヘルパーにアクセスします。

url_for controller: :users, only_path: true
users_path
# => '/users'

または

Rails.application.routes.url_helpers.users_path

4
これは上記のソリューションIMOよりもはるかに簡単です
Andrew

2
これは私の意見では元の質問に対する正しい答えです
nemesisdesign '10

これがIMOの最良の答えになるはずです
Luke

4
私はこれを覚えておくのが面倒なので、コピーと貼り付けのために数日ごとにここに戻ってきます。ありがとう。
スペンサー

1
次のように、コンソールから直接url_helpersを参照することもできませんRails.application.routes.url_helpers.users_pathか?
TheMadDeveloper 2016

25

Railsコンソールでは、変数appがセッションオブジェクトを保持しており、インスタンスオブジェクトとしてパスとURLヘルパーを呼び出すことができます。

app.users_path

11

の出力はいつでもpath_helpersコンソールで確認できます。ヘルパーを使ってapp

app.post_path(3)
#=> "/posts/3"

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"

2

あなたのルートが次のように名前空間であるかどうか覚えてください:

product GET  /products/:id(.:format)  spree/products#show

次に試してください:

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)

出力

Spree::Product Load (0.4ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."deleted_at" IS NULL  ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 

1
spree例をありがとう、あなたは天国から落ちた天使です。
bonafernando
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.