2016-04-22 11 views
0

Ruby on Rails 4のメソッド作成と強力なパラメータに問題があります。ネストされた値を持つ投稿を送信すると、 create_atとupdate_at、私のコード以下:ネストされた属性がテーブルRailsとAngularJSに挿入されない

  1. { 
    "CliRazao"=>"FORNECEDOR 1.", 
    "CliCNPJ"=>"78456896000185", 
    "CliEmail"=>"[email protected]", 
    "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"=>"[email protected]", 
         "CliObs"=>"Teste\nTeste\nTEste" 
        } 
    

    }

  2. マイモデルcliente.rb(父)を送る私のJSON

    クラスCliente <はActiveRecord ::ベース にhas_many:enderecos、自動保存:真

    accepts_nested_attributes_for :enderecos 
    

    エンド

  3. マイモデルendereco.rb(子供)

    クラスEndereco <のActiveRecord ::ベース 所属:クライアント エンド

  4. 私のコントローラ

    クラスClientesController < ApplicationControllerに デフ指数 @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 
    

    エンド

enderecosは私のデータベースと例外なくに挿入されていませんスローされます。

ありがとうございます!

+0

送信したものが間違ったキーを持っているため、 "enderecos" => .... '' enderecos_attributes "=> ....'になるはずです。 –

答えて

0

属性は実際にネストされていません。それらがenderecosのためのjsonだったらクライアントの内部にあるでしょう。

ネストされた属性については、いくつかのことが必要です。

  1. あなたはaccepts_nested_attributes_forが必要です。あなたはあなたがあなたにネストされた属性を追加する必要があり、あなたのコントローラには、ネストされたリソース

  2. buildする必要があなたの新しいアクションには、ネストされた属性

  3. ためfields_forを使用する必要が私たちの形で

  4. 可能なパラメータは.permit(:enderecos_attributes => [:attribute_name, :another_attribute_name]

です。

+1

ありがとう! 私のJSONは間違っていた、あなたは彼が入れ子になっていないと言った。 – GMMaster

関連する問題