2

私は次の関係を持っています:

Class CartItem
belongs_to :cart
belongs_to :product

Class Product (<=> category)
has_many :cart_items


Class Cart
has_many :cart_items

誰かが商品をカートに追加すると、CartItem テーブルに cart.id と product.id を含む行が作成されます。編集ページでカートに商品を追加および削除できますが、機能します。

しかし、同時に複数の製品をカートに追加または削除したいと考えています。顧客が追加/削除したい番号を入力できる場合は、入力番号フィールドが必要です。ただし、編集フォームで、たとえば「番号」というフィールドを(製品ごとに)配置すると、属性「番号」がないため、明らかにエラーが表示されるため、それを行うことができません。おそらく「field_tag」を追加する必要がありますが、どのように機能しますか? 前もって感謝します

4

1 に答える 1

6

私は Rails で書かれたSpreeという e コマースの gem に取り組んでいます。これが私たちがその問題をどのように解決したかです。

VariantProduct、 の4 つのモデルがOrderありLineItemます。これらは、当社の注文システムの基本を形成します。バリアントは、製品の「変異」のようなものと見なすことができます。赤、緑、または青の T シャツがあるとします。製品は T シャツで、色はバリエーションです。

バリアントは、LineItem を介して Order にリンクされます。LineItem オブジェクトには、 a variant_id、 a 、quantityおよび後で変更された場合に備えて、バリアントの現在の価格が格納されます。ユーザーの価格が予期せず変更されることは望ましくありません。

商品をカートに追加するためのロジックは、単に、商品のページに variant_id と数量フィールドを含むフォームです。これが Spree のバージョンです。そのフォームを処理するコントローラーのアクションは、基本的に variant_id と数量を受け取り、これを行います。

  1. 注文がすでに存在するかどうかを確認します
  2. オーダーが存在しない場合は作成します
  3. 指定された数量と variant_id を使用して注文に新しい品目を作成し、価格を保存します。

これに関する Spree のブードゥー教は、在庫レベルなどを考慮しているため、もう少し複雑ですが、それが基本的な要点です。

ユーザーがカートを表示すると、すべての項目と数量の数値フィールドを含むフォームが表示されます。そのフォームは次のようになります。

チェックアウト

そのフォームを作成するコードは、 、 、および の 3 つのファイルorders/edit.html.erborders/_form.html.erbあります。orders/_line_item.html.erb

このフォームは に送信することOrdersController#updateで機能し、フォーム内のフィールドがネストされた属性であるため、注文全体とその項目が適切に更新されます。

これがお役に立てば幸いです。

于 2013-07-10T22:45:00.713 に答える