Jor*_*uel 3 ruby ruby-on-rails
我已经尝试了很多方法,但它不起作用.我在这个项目中,另一个具有相同代码的控制器,另一个使用has_many关系的区别,有问题的是has_one和belongs_to.我们去看看代码.
class Endereco < ActiveRecord::Base
has_one :user
end
class User < ActiveRecord::Base
belongs_to :endereco
accepts_nested_attributes_for :endereco
Run Code Online (Sandbox Code Playgroud)
控制器中的强参数:
class Backoffice::UsersController < BackofficeController
def create
@user = User.new(params_user)
respond_to do |format|
if @user.save!
format.json { render json: @user, include: :endereco}
else
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def params_user
params.require(:user).permit(:nome,
:email,
:password,
:password_confirmation,
:cpf,
:tel_fixo,
:tel_cel,
endereco_attributes: [
:rua,
:bairro,
:cidade,
:uf,
:cep,
:referencia,
:numero,
:complemento
])
end
Run Code Online (Sandbox Code Playgroud)
当我通过POSTMAN发送这个json时,我得到#Array的错误>未定义方法`with_indifferent_access':在这一行
@user = User.new(params_user)
{ "user":{
"nome" : "teste1",
"email" : "teste@tt.com",
"password": "123",
"password_confirmation": "123",
"cpf": "123321",
"tel_fixo": "123321",
"tel_cel": "asdsd",
"endereco_attributes": [
{
"rua": "tt",
"bairro": "tete",
"cidade": "asdas",
"uf":"asdasd",
"cep": "12321",
"referencia": "asdasd",
"numero":"123",
"complemento":"123" }
]
}}
Run Code Online (Sandbox Code Playgroud)
有人给我点灯吗?谢谢!
你endereco_attributes在输入中创建了一个Array,而不是一个对象(然后它变成了Ruby中的Hash).由于它是一个单数(belongs_to)关联,Rails希望它是一个哈希,而不是一个哈希数组.数组没有这个方法with_indifferent_access,但Hash没有.
更改您的输入以匹配正确的结构,一切都应该很好.
我的 json 错了……我在 [] 的地方不应该
"endereco_attributes": [{... }]
Run Code Online (Sandbox Code Playgroud)
正确的
"endereco_attributes": {... }
Run Code Online (Sandbox Code Playgroud)
谢谢。