Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 选择表单中的嵌套属性_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 选择表单中的嵌套属性

Ruby on rails 选择表单中的嵌套属性,ruby-on-rails,ruby,Ruby On Rails,Ruby,这是一家网上商店 我创建具有嵌套大小和属性的产品 顾客可以购买产品,他必须选择自己的尺码 产品\u controller.rb def params_product params.require(:product).permit(:title, :description, :price, :category_id, :color, sizes_attributes: [:id, :size_name, :quantity, :_destroy]) end def ini

这是一家网上商店

我创建具有嵌套大小和属性的产品

顾客可以购买产品,他必须选择自己的尺码

产品\u controller.rb

  def params_product
    params.require(:product).permit(:title, :description, :price, 
:category_id, :color, sizes_attributes: [:id, :size_name, :quantity, :_destroy])
   end
  def initialize(token:)
    @token = token
  end

  def order
   @order ||= Order.find_or_create_by(token: @token, status: 0) do |order|
    order.sub_total = 0
   end
 end

 def add_item(product_id:, quantity: 1, user_id:, size_id:)
   @product = Product.find(product_id)
   @size = Size.find_by(id: size_id)
   #binding.pry

   user = User.find(user_id)
   order.user_id = user.id

   order_item = order.items.find_or_initialize_by(product_id: product_id)
   order_item.price = @product.price
   order_item.quantity = quantity
   order_item.size_id = @size.id


   ActiveRecord::Base.transaction do
     order_item.save
   end
 end
  def create
    current_cart.add_item(
     product_id: params[:product_id],
     quantity: params[:quantity],
     user_id: params[:user_id],
     size_id: params[:size_id]
   )
  end 
products/show.html.erb

  def params_product
    params.require(:product).permit(:title, :description, :price, 
:category_id, :color, sizes_attributes: [:id, :size_name, :quantity, :_destroy])
   end
  def initialize(token:)
    @token = token
  end

  def order
   @order ||= Order.find_or_create_by(token: @token, status: 0) do |order|
    order.sub_total = 0
   end
 end

 def add_item(product_id:, quantity: 1, user_id:, size_id:)
   @product = Product.find(product_id)
   @size = Size.find_by(id: size_id)
   #binding.pry

   user = User.find(user_id)
   order.user_id = user.id

   order_item = order.items.find_or_initialize_by(product_id: product_id)
   order_item.price = @product.price
   order_item.quantity = quantity
   order_item.size_id = @size.id


   ActiveRecord::Base.transaction do
     order_item.save
   end
 end
  def create
    current_cart.add_item(
     product_id: params[:product_id],
     quantity: params[:quantity],
     user_id: params[:user_id],
     size_id: params[:size_id]
   )
  end 
因此,客户可以选择想要的数量和尺寸

   <%= form_tag order_items_path do %>
    <%= hidden_field_tag :product_id, @product.id %>
    <%= hidden_field_tag :user_id, current_user.id %>
    <%= number_field_tag :quantity, 1 %> 
    <%= collection_select :size, :id, @product.sizes, :id, :size_name, prompt: "Votre taille" %>
    <%= submit_tag "Add to Cart" %>
   <% end %>
订购项目\u控制器.rb

  def params_product
    params.require(:product).permit(:title, :description, :price, 
:category_id, :color, sizes_attributes: [:id, :size_name, :quantity, :_destroy])
   end
  def initialize(token:)
    @token = token
  end

  def order
   @order ||= Order.find_or_create_by(token: @token, status: 0) do |order|
    order.sub_total = 0
   end
 end

 def add_item(product_id:, quantity: 1, user_id:, size_id:)
   @product = Product.find(product_id)
   @size = Size.find_by(id: size_id)
   #binding.pry

   user = User.find(user_id)
   order.user_id = user.id

   order_item = order.items.find_or_initialize_by(product_id: product_id)
   order_item.price = @product.price
   order_item.quantity = quantity
   order_item.size_id = @size.id


   ActiveRecord::Base.transaction do
     order_item.save
   end
 end
  def create
    current_cart.add_item(
     product_id: params[:product_id],
     quantity: params[:quantity],
     user_id: params[:user_id],
     size_id: params[:size_id]
   )
  end 
所以问题是:
  • 产品上的可用尺寸可以是[“S”、“M”、“L”、“XL”]
  • 我的用户已选择“L”
  • 所选尺寸不保存

它记录的是

collection\u select
生成一个名为name=“size[id]”的select字段,然后在控制器参数中得到
{size:{id 1}}
而不是
{size\u id:1}
。您需要的是在此处选择标记帮助器:

<%= select_tag :size_id, options_from_collection_for_select(@product.sizes, :id, :size_name), prompt: "Votre taille" %>

您能否编辑您的问题并包含此事务的web服务器控制台消息?应该有一个显示正在提交的参数的窗口,这将有助于确保表单发送的内容正在被控制器发送和接受。另外,右键单击表单并检查size元素,确保ERB正在生成所需的HTML。我将冒险猜测,表单提交参数的方式有问题,很可能是提交的参数中缺少嵌套。