gpt4 book ai didi

ruby-on-rails - 更新时 Rails 4 嵌套属性多条记录

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:37 25 4
gpt4 key购买 nike

我卡住了,我不知道为什么它不能正常工作。我有一个模型产品,它有很多标签。当我更新产品 rails 时,会正确更新产品属性,但会创建另一个标签记录,而不是仅仅更新它。

这是我的代码:

查看表单:

 <%= form_for ([@product.user, @product]), id: 'edit_form' do |f| %>
<%= render 'shared/error_messages', object: f.object %>

<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>

<div class="field">
<%= f.fields_for :tags do |t| %>
<%= t.label :name %>
<%= t.text_field :name %>
<% end %>
</div>


<div class="actions">
<%= f.submit %>
</div>
<% end %>

产品型号:

 class Product < ActiveRecord::Base

belongs_to :user, :foreign_key => "user_id"
has_many :tags, :dependent => :destroy
accepts_nested_attributes_for :tags, reject_if: :all_blank, allow_destroy: true, :update_only => true
end

标签模型:

 class Tag < ActiveRecord::Base
belongs_to :product, :foreign_key => "product_id"
# before_save { name.downcase! }

end

产品负责人:

 def edit
user = User.find(params[:user_id])
@product = user.products.find(params[:id])
@tags = @product.tags.all

respond_to do |format|
format.html
format.js
end
end

def update
user = User.find(params[:user_id])
@product = user.products.find(params[:id])
@tags = @product.tags.all

respond_to do |format|
if @product.update(product_params)
format.html { redirect_to([@product.user, @product], :notice => 'Product successfully updated.') }
else
format.html { render :action => "edit" }
end
end
end

def product_params
params.require(:product).permit(:name, :description, tags_attributes: :name)
end

最佳答案

您必须在 Controller 的许可参数中传递标签 ID

def product_params
params.require(:product).permit(:name, :description, tags_attributes: [:id,:name])
end

关于ruby-on-rails - 更新时 Rails 4 嵌套属性多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com