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_属性。如果未找到,我们将使用行项目构建一个新的产品属性
。构建产品属性