0

このコードでは:

<

    % @products.each do |product| %>
      <div class="entry">
        <%= image_tag(product.image_url) %>
        <h3><%= product.title %></h3>
        <p><%= sanitize(product.description) %></p>
        <div class="price_line">
          <span class="price"><%= number_to_currency(product.price) %></span>
    <!-- START_HIGHLIGHT -->
          <%= button_to 'Add to Cart', line_items_path(product_id: product),
            remote: true %>
    <!-- END_HIGHLIGHT -->
        </div>
      </div>
    <% end %>

パラメータが渡されたbutton_toメソッドがある下部に:

    <%= button_to 'Add to Cart', line_items_path(product_id: product),
        remote: true %>

コードを見ると、何が起こっているのかについての私の理解は次のとおりです。正しく理解できましたか、それとも何かを見逃しましたか?

そのコードでは、「カートに追加」というテキストを含むボタンを作成し、prodcut 変数の product_id をそれに渡します。これは、上部の for-each ループから来て、link_items ページに移動するように指示します。 ID が product_id の製品の POST メソッド。

もう 1 つの質問: lines_items_path に product.product_id を渡すことはできますか? またはそれはうまくいきませんか?

4

2 に答える 2

1

これは、 Rails を使用したアジャイル Web 開発の本からの例だと思います。ずいぶん前に読んだのですが・・・記憶が正しければproducts、 、ordersとがありline_itemsます。

を呼び出すrake routesと、 が POST として、 内のアクションline_items_pathのルートであることがわかります。詳細: CRUD 動詞とアクションcreateline_items_controller

したがって、次のproduct_idようなものが必要な create アクションにを渡しています。

def create
  product = Product.find(params[:product_id])
...
end
于 2013-01-21T22:21:57.047 に答える
1

私はあなたの別の質問を理解しました。答えは: コードは の値をproduct.idシンボルに代入しますproduct_id。シンボルproduct_idは、次のステップで使用されようとしています (おそらく、 の値がproduct_idキーになる関連付けを作成するため)。あなたの質問「なぜ、そうproductではないのかproduct.id」は合理的なものです。その答えは、Rails フレームワークの規則にあります。オブジェクトの ID を使用したい場合は、その.id部分を省略すれば、Rails が正しく推測します。

product.product_idモデル Product にはproduct_idメソッドまたはプロパティ (どちらを優先するか)がないため、を渡すことはできません。それは持ってい.idます。

質問の最初の部分を明確にしてください。

編集(質問の最初の部分-段階的に)

@products.each do |product|- ループはオブジェクトの配列を反復します (@products はオブジェクトの配列であり、次のようなコントローラーのアクションで構成されます:@products= Product.allまたは同様のもの)。すべてのステップで、内部のコードdo .. endはローカル変数で動作しますproduct。これはオブジェクトで、データベースの 1 つの行に対応するため、 product.id 、 product.name などの「プロパティ」(列に対応) があります。

次に、抽出されたデータベース行の数と同じ数のボタンを作成します。

どのボタンが押されたかに関する情報は、新しい変数によって運ばれます (この場合、シンボルの形式で - 研究に値する特別な Ruby 用語:)) したがって、次のように、product.id の値をそれに割り当てます。 : product_id: product.id. 要約: ローカル変数を作成しましたproduct_id。このコードの古いスタイル ::product_id => productはより説明的です。

于 2013-01-21T22:07:57.290 に答える