3

redirect_to、link_to、url_for などの多くのヘルパー メソッドは、コントローラーとアクションを指定するハッシュの代わりに ActiveRecord オブジェクトをパラメーターとして受け取ることができます。パラメータがさまざまなドキュメントでさまざまな方法で渡されるのを見てきました。シンボルとして渡されることもあれば、インスタンス変数として渡されることもあれば、ローカル変数として渡されることもあります。

さまざまなパラメーター スタイルが展開されて URL を返す方法について混乱しています。REST 規則に従うと、コントローラーとアクションで構成される URL を作成する必要があることはわかっていますが、Rails がその URL を作成するために特定のパラメーター スタイルをいつ必要とするかはわかりません。ActiveRecord オブジェクトをシンボル、インスタンス変数、またはローカル変数として渡すユースケースを理解するのを手伝ってください。メソッド呼び出しに基づくさまざまな要件はありますか? それとも、URL の構造に根本的な違いがありますか?

ここではいくつかの例を示します。

API ドキュメントから:

link_to "Profile", @profile  
redirect_to post  
<%= url_for(@workshop) %>  
<%= form_for :person do |f| %> (this is described as the “generic #form_for”)

Ruby on Rails ガイドから:

<%= link_to 'New book', new_book_path %>  
redirect_to(@book)  
form_for(@article)  

Rails 3 Way から:

'link_to' "Help", help_widgets_path, :popup => 1  
redirect_to post  
url_for(timesheets_path)  
form_for offer do |f|  

注: さらに調査すると、呼び出し元のビュー テンプレートが :locals ハッシュをパラメーターとして渡す場合、form_for はローカル変数を受け入れることができるようです。キーはパーシャルで使用できるローカル変数で、値はテンプレートのインスタンス変数です。それは正しい理解ですか?

4

1 に答える 1

0
  • オブジェクトを link_to と url_for に渡すことができます
  • パスヘルパーにオブジェクトを渡すこともできます
  • @postとはどちらpostもオブジェクトです。@post はインスタンス変数で、post はローカル変数または投稿を返すメソッドです。

唯一の「奇妙な」ものはform_for :post多様性です。これは古い学校の Rails 構文であり、これを内部の構文に変更しform_for @postます。

于 2012-11-02T13:09:52.077 に答える