accept_nested_attributes_for不更新嵌套表
问题描述:
我有2个表cardapios和产品,当我想更新cardapios accept_nested_attributes_for不更新产品和_destroy =“1”不会删除产品。按照波纹管我的代码:accept_nested_attributes_for不更新嵌套表
class Cardapio < ActiveRecord::Base
mount_uploader :imagem, CardapioImagemUploader
belongs_to :empresa
has_many :itens
has_many :cardapios_produtos
has_many :cardapios_eventos
has_and_belongs_to_many :eventos
has_and_belongs_to_many :produtos
accepts_nested_attributes_for :cardapios_produtos, reject_if: proc { |a| a[:produto_id].blank? or a[:preco].blank? }, allow_destroy: true
def update
authorize @cardapio
atualiza_imagem
binding.pry
if @cardapio.update_attributes(cardapio_params)
if params[:parent_controller].present?
redirect_to controller: params[:parent_controller], action: params[:parent_action], id: params[:parent_id].to_i, notice: 'Cardapio was successfully updated.'
else
redirect_to cardapios_path, notice: 'Cardapio was successfully updated.'
end
else
render :edit
end
end
def cardapio_params
params.require(:cardapio)
.permit(
:nome, :empresa_id,
:imagem, :imagem_crop_x, :imagem_crop_y, :imagem_crop_w, :imagem_crop_h,
evento_ids: [],
cardapios_produtos_attributes: [
:id, :cardapio_id, :produto_id, :preco, :destaque, :_destroy
]
)
end
娄我们binding.pry的之前的update_attributes结果:
[1] pry(#<CardapiosController>)> cardapio_params
=> {"nome"=>"Cardapio BDD Light",
"empresa_id"=>"3",
"imagem_crop_x"=>"",
"imagem_crop_y"=>"",
"imagem_crop_w"=>"",
"imagem_crop_h"=>"",
"evento_ids"=>["", "1"],
"cardapios_produtos_attributes"=>
{"0"=>{"id"=>"4", "produto_id"=>"1", "preco"=>"5", "destaque"=>"0", "_destroy"=>"0"},
"1"=>{"id"=>"5", "produto_id"=>"7", "preco"=>"20", "destaque"=>"1", "_destroy"=>"0"},
"2"=>{"id"=>"22", "produto_id"=>"12", "preco"=>"13.5", "destaque"=>"0", "_destroy"=>"1"},
"3"=>{"produto_id"=>"", "preco"=>"", "destaque"=>"0", "_destroy"=>"0"},
"4"=>{"produto_id"=>"", "preco"=>"", "destaque"=>"0", "_destroy"=>"0"},
"5"=>{"produto_id"=>"", "preco"=>"", "destaque"=>"0", "_destroy"=>"0"},
"6"=>{"produto_id"=>"", "preco"=>"", "destaque"=>"0", "_destroy"=>"0"},
"7"=>{"produto_id"=>"", "preco"=>"", "destaque"=>"0", "_destroy"=>"0"}}}
有人可以帮我吗?
答
我觉得问题出在模型的这个部分has_and_belongs_to_many :produtos
。根据此文档http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
有一对一和一对多。 您应该使用has_many
或has_one
。
由于您拥有'cardapios_produtos'连接表,因此''has_and_belongs_to_many'实际上应该是'has_many through'关系。 – urielSilva