嵌套属性未插入表Rails和AngularJS

时间:2016-04-22 18:22:31

标签: ruby-on-rails angularjs strong-parameters

我在Ruby on Rails 4,方法创建和强参数方面存在一个问题,当发送带有嵌套值的帖子时,我的应用程序保存对象父对齐,但子代只保存create_at和update_at,低于我的代码:

  1. 我的JSON发送

    {
    "CliRazao"=>"FORNECEDOR 1.", 
    "CliCNPJ"=>"78456896000185", 
    "CliEmail"=>"contato@contato.com.br", 
    "CliObs"=>"Teste\nTeste\nTEste", 
    "enderecos"=>[
        {
            "EndCEP"=>"17456789", 
            "EndTipo"=>"E", 
            "EndLogradouro"=>"RUA DOS TUCUNARES", 
            "EndNumero"=>"78", 
            "EndBairro"=>"JARDIM AQUARIUS", 
            "EndCidade"=>"MARILIA", 
            "EndEstado"=>"SP"
        }, 
        {
            "EndCEP"=>"18456123", 
            "EndTipo"=>"C", 
            "EndLogradouro"=>"RUA AFONSO PENA", 
            "EndNumero"=>"78", 
            "EndBairro"=>"JARDIM NOVO MUNDO", 
            "EndCidade"=>"MARILIA", 
            "EndEstado"=>"SP"
        }
    ], 
    "CliERP"=>"C-00125", 
    "cliente"=>
        {
            "CliERP"=>"C-00125", 
            "CliRazao"=>"FORNECEDOR 1", 
            "CliCNPJ"=>"78456896000185", 
            "CliEmail"=>"contato@contato.com.br", 
            "CliObs"=>"Teste\nTeste\nTEste"
        }
    

    }

  2. 我的模型cliente.rb(父亲)

    class Cliente<的ActiveRecord :: Base的     has_many:enderecos,autosave:true

    accepts_nested_attributes_for :enderecos
    

  3. My Model endereco.rb(Child)

    类Endereco<的ActiveRecord :: Base的     belongs_to:cliente 端

  4. 我的控制器

    class ClientesController< ApplicationController的     def指数         @clientes = Cliente.all     端

    def findById
        @clientes = Cliente.find(params[:id]);
    end
    
    def create
        @cliente = Cliente.new(cliente_params);
        @cliente.enderecos.build(cliente_params[:enderecos_attributes]);
        logger.debug "Enderecos => #{cliente_params}"
    
        respond_to do |format|
            if @cliente.save
                format.json { render :show, status: :created }
            else
                format.json { render json: @cliente.errors, status: :unprocessable_entity }
            end
        end
    end
    
    def update
    end
    
    private
    def cliente_params
        params.require(:cliente).permit(:CliERP, :CliRazao, :CliCNPJ, :CliEmail, :CliObs, enderecos_attributes: [:EndTipo, :EndLogradouro, :EndNumero, :EndBairro, :EndCidade, :EndCEP, :EndEstado])
    end
    

  5. 未在我的数据库中插入详细信息,并且不会抛出任何异常。

    谢谢!

1 个答案:

答案 0 :(得分:0)

您的属性实际上并未嵌套。如果他们是爱丁堡的json将在内部客户。

对于嵌套属性,您需要做几件事。

  1. 您需要accepts_nested_attributes_for

  2. 在我们的表单中,您需要使用fields_for作为嵌套属性

  3. 在新操作中,您需要build嵌套资源

  4. 在您的控制器中,您需要使用.permit(:enderecos_attributes => [:attribute_name, :another_attribute_name]

  5. 将嵌套属性添加到允许的参数中

    希望它有所帮助。