Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 构建嵌套属性(如果存在)将数量增加1_Ruby On Rails - Fatal编程技术网

Ruby on rails 构建嵌套属性(如果存在)将数量增加1

Ruby on rails 构建嵌套属性(如果存在)将数量增加1,ruby-on-rails,Ruby On Rails,我的表单设置如下: <%= simple_form_for @line_item do |f| %> <%= f.input :product_id, as: :hidden, input_html: { value: @product.id } %> <%= f.simple_fields_for :line_item_attributes do |attributes_form| %> <%= attributes_form

我的表单设置如下:

<%= simple_form_for @line_item do |f| %>
  <%= f.input :product_id, as: :hidden, input_html: { value: @product.id } %>

    <%= f.simple_fields_for :line_item_attributes do |attributes_form| %>
      <%= attributes_form.association :product_attribute, collection: @product.product_attributes %>
    <% end %>

    <%= f.button :submit %>
<% end %>
  def create
    product = Product.find(params[:line_item][:product_id])
    @line_item = @cart.line_items.build(product: product)

    respond_to do |format|
      if @line_item.save
        format.html { redirect_to @line_item, notice: 'Line item was successfully created.' }
        format.json { render :show, status: :created, location: @line_item }
      else
        format.html { render :new }
        format.json { render json: @line_item.errors, status: :unprocessable_entity }
      end
    end
  end

现在,我想扩展它,以便为
line\u项
构建嵌套属性。小问题是,如果项目已经存在,我希望不创建记录,而是+=1。我在想我可能需要创建一个方法,有人有什么想法吗?

您可能不需要额外的方法

def create
  product = Product.find(params[:line_item][:product_id])
  @line_item = @cart.line_items.build do |line_item|
    line_item.product = product 
    line_item.product_attribute = ProductAttribute.where(...).first || line_item.build_product_attribute()
  end

  ...
end
line_item.product_attribute=ProductAttribute.where(…).first | line_item.build_product_attribute()
根据
where(…)
中提供的条件分配现有的
product_属性。如果未找到,我们将使用
行项目构建一个新的
产品属性
。构建产品属性