我在Ruby on Rails 4,方法创建和强参数方面存在一个问题,当发送带有嵌套值的帖子时,我的应用程序保存对象父对齐,但子代只保存create_at和update_at,低于我的代码:
我的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"
}
}
我的模型cliente.rb(父亲)
class Cliente<的ActiveRecord :: Base的 has_many:enderecos,autosave:true
accepts_nested_attributes_for :enderecos
端
My Model endereco.rb(Child)
类Endereco<的ActiveRecord :: Base的 belongs_to:cliente 端
我的控制器
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
端
未在我的数据库中插入详细信息,并且不会抛出任何异常。
谢谢!
答案 0 :(得分:0)
您的属性实际上并未嵌套。如果他们是爱丁堡的json
将在内部客户。
对于嵌套属性,您需要做几件事。
您需要accepts_nested_attributes_for
。
在我们的表单中,您需要使用fields_for
作为嵌套属性
在新操作中,您需要build
嵌套资源
在您的控制器中,您需要使用.permit(:enderecos_attributes => [:attribute_name, :another_attribute_name]
希望它有所帮助。