accepts_nested_attributes_for不更新嵌套表

时间:2017-08-16 23:19:51

标签: ruby-on-rails

我有2张表cardapios和produtos,当我想更新cardapios accepted_nested_attributes_for不更新produtos和_destroy =“1”不删除produto。请关注我的代码:

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    

Bellow我们在update_attributes:

之前有binding.pry的结果
[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"}}}

愿任何人帮帮我吗?

1 个答案:

答案 0 :(得分:2)

我认为问题在于模型中的这部分TaskContextContainerTestCase。根据此文件http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
有一对一和一对多。 您应该使用has_and_belongs_to_many :produtoshas_many