0

私は本の例を見ています。Products モデルのビュー セクションに、次のようなコードが表示されます。

<table>
  <% @products.each do |product| %>
    <tr class="<%= cycle ('list_line_odd', 'list_line_even') %>">
      <td>
        <%= image_tag(product.image_url, class: 'list_image' %>
      </td>
    <td class ="list_description ">
       <dl>
           <dt> <%= product.title %> </dt>

上部で@productsを使用していることに注意してください。テーブルの最後の行では@productsの代わりにproductsを使用しています。誰かがこれをもう少し説明できますか?

4

4 に答える 4

1

この例では、 @ productsはEnumerator#eachメソッドに応答するコレクションです。実際には、これは一般的にアレイを意味します。次に、 @productsの各要素をproduct変数としてブロックに繰り返し渡します。

つまり、productは、ループの実行中に@productsから取得された単一の要素です。

于 2013-01-20T20:32:39.797 に答える
1

@productsには、Productオブジェクトのコレクションが含まれています。product変数には、Productのインスタンスが1つ含まれています。

于 2013-01-20T20:34:46.423 に答える
1

Ruby には 3 種類の変数があります。

  • product通常の変数。サンプル コードのスコープ内でのみ使用可能
  • クラスの特定のインスタンスで使用できるインスタンス変数。@productsあなたの例では、各インスタンスには独自のインスタンス変数のセットがあります
  • クラスのすべてのインスタンスで使用可能なクラス変数。これらは (インスタンスなしで) 直接アクセスすることもできます (@@variableこのタイプの例はありません) 。

最後の行はproductと は とはまったく異なる変数です@products@productsコントローラーのクラス インスタンス (おそらく と呼ばれるProductsController) によって満たされます。これは製品のリストであり、このeach()メソッドは各リスト項目を反復処理するために使用されます。反復ループproductでは、反復されている現在の製品を指定するために使用されます。

于 2013-01-20T20:37:24.813 に答える
1

コントローラーとビューのコンテキストでは、コントローラーでインスタンス変数 (@ 記号で始まる) を宣言して、それらをビューに渡します。

先頭に @ 記号がない変数は、反復の要素など、限られたスコープ内でのみ使用できる変数です。

@products をコントローラーからビューに渡します。その後、 @products 変数の要素の一時的な識別子として product を使用して、要素を反復処理できます。

于 2013-01-20T20:47:09.880 に答える