5
  <% form_tag(:action=>'update', :id=>@album.id) do %>

  Title: <%= text_field(:album, :title)  %><br>
  Artist: <%= text_field(:album, :artist)  %><br>
  Genre: <%= text_field(:album, :genre)  %><br>
  Release Date: <%= datetime_select(:album, :release_date, :start_year=>1960) %><br>

  <%= submit_tag("Update") %>

  <% end %>

上記の例では、form_tag で @album.id と指定する必要がありましたが、text_field では :album と指定する必要がありました。私は自分の見解でこれらを混乱させ続けており、@ 記号と記号のどちらを使用するべきか本当にわかりません。何をいつ使用するかを明確にする簡単なルールはありますか?

4

2 に答える 2

14

ちょっと話が逸れますが、ご了承ください。

まず、RESTful ルーティングを使用することをお勧めします。これにより、次のような Rails のより優れたメソッドや操作にアクセスできるようになります。

form_for(@album) do |f|

#new_record?そのオブジェクトの状態に基づいて、どこに行きたいかを解決します。

第二に、新しいform_forものを用意したら、次のようにしてビューを乾燥させることができます。

<%= f.text_field :title %>

それ以外の:

<%= text_field :album, :title %>

最後に、Rails で変数の前に @ 記号を付けて定義する理由 (「インスタンス変数」とも呼ばれる) について説明します。

Rails でインスタンス変数を定義すると、リクエスト全体でそのインスタンス内で使用できます。「インスタンス」は、ActionControllerすべてActionViewのレンダリングなどを行うために呼び出されるメソッドのチェーンです。インスタンス変数として定義すると、コントローラー、コントローラーで定義した後に呼び出すすべてのメソッド、ヘルパー、ビュー、およびコントローラー、ヘルパー、またはビューからレンダリングされたパーシャルで使用できるようになります。

基本的に、リクエスト全体に使用できますが、モデル内ではアクセスできません。

その他の変数指定には、クラス変数 ( @@some_useful_thing = 1) とグローバル変数 ( $some_other_useful_thing = 1) および定数 ( ALL_IN_UP_CASE = 1) があります。

于 2009-05-08T04:38:33.223 に答える
6

変数名の前の @ 記号は、現在のクラスのインスタンス変数を参照します。: (コロン) プレフィックスはシンボルを作成します。あなたの例では、インスタンス変数@album.idの id を に送信して、データベースからそのオブジェクトを読み取り、そのオブジェクトからの適切なデータをフォーム フィールドに入力できるようにします。メソッドで渡すシンボルは、データベースから作成するオブジェクトの特定のプロパティにアクセスするために使用するものです。次に、これらのプロパティの値を、生成したテキスト フィールドに入力します。@albumform_tagform_tagtext_fieldform_tag

于 2009-05-08T03:32:33.273 に答える