2013-07-03 17 views
25

URLヘルパーがRailsでどのような引数を取るのかを知るにはどうすればよいですか?たとえば、url helperが以下のパラメータを1つだけ受け取ることを知るにはどうすればよいですか?私はこれらのメソッドがメタプログラムされていることを知っていますが、ドキュメントはどこにありますか?URLヘルパーのドキュメントはどこにありますか?

link_to "New Ticket", new_project_ticket_path(@project) 

答えて

49

ルートヘルパーが必要とするパラメータの数は、ルート定義を調べることで判断できます。最初の列はあなたに名前を与えます

users GET /users(.:format)   users#index 
      POST /users(.:format)   users#create 
new_user GET /users/new(.:format)  users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
    user GET /users/:id(.:format)  users#show 
      PUT /users/:id(.:format)  users#update 
      DELETE /users/:id(.:format)  users#destroy 

:あなたはこのように表示されるコマンドラインでrake routesを実行した場合は

resources :users 

たとえば、あなたがこのルートのファイルを持っているかもしれませんルートの_pathまたは_urlを追加すると、ルートヘルパーの名前を取得できます。

第3列はパターンを示します。これは、引数が何であるか把握できる場所です。引数はコロンで始まる部分で、省略可能な引数はかっこで囲みます。

edit_user_path(1) # => "https://stackoverflow.com/users/1/edit" 
edit_user_path(2, :html) # => "https://stackoverflow.com/users/2/edit.html" 

:たとえばedit_userルートが1引数(id)と1つのオプションの引数(format)を必要と含まれているパターン/users/:id/edit(.:format)を持って、どの私はedit_user_pathまたはedit_user_urlヘルパーに対して少なくとも1つの引数を渡す必要が私に語りました

:最後に

edit_user_path(id: 3, format: 'js') # => "https://stackoverflow.com/users/3/edit.js" 

、クエリ文字列の一部となる余分な引数を追加することができます:あなたはまた、ハッシュにキーとしてパターンから引数名を使用することができます

edit_user_path(id: 4, format: 'json', foo: 1) # => "https://stackoverflow.com/users/4/edit.json?foo=1" 
edit_user_path(5, bar: 2) # => "https://stackoverflow.com/users/5/edit?bar=2" 

rake routesの詳細については、Rails Routing Guide's section on Listing Existing Routesを参照してください。

+0

これはすばらしい答えです!ありがとうございました! – lampShade

+1

私は 'rake routes'で示されているように' admin_account_reset_password'という名前のルートを持っていますが、 'ActionMailer'内から' admin_account_reset_password_url() 'を呼び出すと、"未定義のメソッド 'Admin_account_reset_password_url' for Admin :: AccountMailer:Class " - thoughts ? –

+0

これは素晴らしい答えですが、私は上記のリンクを読んで、私はドキュメントの 'あなたがクエリ文字列の一部になる余分な引数を追加することができます'を見つけることができませんが、あなたはどこに生成されたパスメソッド? – GMsoF

0

を参照してください。これは、link_to、button_to、link_to_unless、link_to_unless_current、current_page?、およびmail_toを含んでいます。

link_to(name = nil, options = nil, html_options = nil, &block) 

link_to(body, url, html_options = {}) 
# url is a String; you can use URL helpers like posts_path 

オプション

:データ - このオプションは、カスタムデータ属性を追加するために使用することができます。

メソッド:HTTP動詞のシンボル - この修飾子は、動的にHTMLフォームを作成し、指定されたHTTP動詞を使用して処理するためにフォームをすぐに送信します。レコードを削除する(サイトをスパイダーしている間に検索ボットが続けることができる)ような危険なアクションでは、リンクを持ってPOST操作を実行すると便利です。サポートされる動詞は:post、:delete、:patch、:putです。ユーザーがJavaScriptを無効にしている場合、リクエストはGETを使用することに戻ります。 href: '#'が使用され、ユーザーがJavaScriptを無効にした場合、リンクをクリックしても効果はありません。 POSTの振る舞いに頼っているのであれば、あなたのコントローラーのアクションでPOSTオブジェクトのメソッドを使ってチェックする必要があります。?、delete?、:patch、put?

remote:これにより、邪魔にならないJavaScriptドライバは、リンクをたどる代わりに問題のURLにAjaxリクエストを行うことができます。彼らは完全だ後、ドライバーそれぞれがAjaxリクエストが完了するのを聞いて、JavaScriptの操作を実行するためのメカニズムを提供

データは

確認属性:「?質問」を - これにより、控えめなJavaScriptドライバは、指定された質問を促すことができます。ユーザーが承諾すると、リンクは正常に処理され、そうでない場合は何も処理は行われません。

:disable_with - このパラメータの値は、フォームの送信時に無効なバージョンの送信ボタンの値として使用されます。この機能は、控えめなJavaScriptドライバによって提供されます。

関連する問題