質問

  <% 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と指定する必要がありました。私は自分の意見でこれらを混乱させ続け、@記号を使用するかシンボルを使用するかを本当に知りません。いつ何を使用するかを明確にする簡単なルールはありますか?

役に立ちましたか?

解決

しばらくここで接線を外しますが、我慢してください。

まず、 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 )。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top