0

ユーザーシステムのない単純なオンラインストアをセットアップしています - カートに続くセッションだけです。現在、製品 (製品カテゴリと考えることができます) を選択し、その製品ページ内でそれに属する ProductVariant (product_variant_id) を選択できます。

問題は、異なる product_variants を追加すると、データベースに保存された最初のものだけがカートに追加されることです。ドロップダウンで product_variants を選択できますが、レコードのデータベースに最初に追加されたものだけが order_item としてカートに追加されます。

私の関連モデル:

Product

  has_many :product_variants, dependent: :destroy

  has_many :order_items, :through => :product_variants

ProductVariant

  belongs_to :product
  has_many :order_items, dependent: :destroy

OrderItem

  belongs_to :order, optional: true
  belongs_to :cart, optional: true
  belongs_to :product_variant
  belongs_to :product

Cart 

has_many :order_items

そして、これが show.html.erb の私の製品ショーページで、product_variant を選択するオプションがあります

<%= link_to products_path do %>
<h4>Back to store gallery</h4>
<% end %>

<section class="flexbox">
  <div class="flex">
      <%= image_tag @product.image_1.show.url %>
  </div>
  <div class="flex">
      <h2><%= @product.title %></h2>

      <div class="product-description">
        <h5>Description:</h5>
          <p><%= @product.description %></p>
      </div>
  </div>
</section>


<%= simple_form_for [@product, @product_variant, @order_item] do |f| %>
  <%= f.input :quantity %>

  <%= f.button :submit, "Add to cart" %>
<% end %>



Product selection: <br>
<select name="product[product_variant_id]">
    <% @product.product_variants.each do |product_variant| %>
        <option value="<%= product_variant.id %>"><%= product_variant.item %>/<%= product_variant.size %>/<%= product_variant.color %>/<%= number_to_currency product_variant.price_in_dollars %></option>
    <% end %>
</select>

最後に、これが私の order_items コントローラーです

class OrderItemsController < ApplicationController
  
  def create
    @product = Product.friendly.find(params[:product_id])
    # find the product_variant
    @product_variant = ProductVariant.find(params[:product_variant_id])
    # quantity? - comes from the form data
    @quantity = form_params[:quantity]
    @current_cart.order_items.create(product: @product, product_variant: @product_variant, quantity: @quantity)
    flash[:success] = "Thanks for adding to your cart"
    redirect_to product_path(@product)
  end
  
  def update
    @product = Product.friendly.find(params[:product_id])
    @product_variant = ProductVariant.find(params[:product_variant_id])
    @order_item = OrderItem.find(params[:id])
    @order_item.update(form_params)
    flash[:success] = "Thanks for updating your cart"
    redirect_to cart_path
  end
  
  def destroy
    @product = Product.friendly.find(params[:product_id])
    @product_variant = ProductVariant.find(params[:product_variant_id])
    @order_item = OrderItem.find(params[:id])
    @order_item.delete
    flash[:success] = "Product removed from cart"
    redirect_to cart_path
  end
  
  def form_params
    params.require(:order_item).permit(:quantity)
  end
end

ここで何がうまくいかないのかについての洞察に感謝します。さらに関連するコードを提供する必要がある場合は、躊躇しないでください。喜んで提供します。

アーロン

4

0 に答える 0