2017-11-04 2 views
1

Ich habe es auf verschiedene Arten versucht, aber es funktioniert nicht. Ich habe in diesem Projekt einen anderen Controller mit dem gleichen Code arbeiten, der Unterschied, dass ein anderer die has_many-Beziehung verwendet, und der mit Problem ist has_one und gehört_to. Lass uns zum Code gehen.undefined Methode `with_indifferent_access 'für # <Array:

class Endereco < ActiveRecord::Base 
has_one :user 
end 

class User < ActiveRecord::Base 
belongs_to :endereco 
accepts_nested_attributes_for :endereco 

Der starke Parameter in der Steuerung:

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 

Als ich diese json über POSTMAN senden erhalte ich die Fehler> nicht definierte Methode `with_indifferent_access' für #ARRAY: auf dieser Linie

@ user = Benutzer.neu (params_user)

{ "user":{ 
    "nome" : "teste1", 
    "email" : "[email protected]", 
    "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" } 
    ] 
}} 

Jemand, der mir ein Licht gibt? Vielen Dank!

Antwort

2

Sie haben endereco_attributes in Ihrer Eingabe ein Array, anstatt ein Objekt (das dann ein Hash in Ruby wird). Da es sich um eine singuläre (belongs_to) Assoziation handelt, erwartet Rails, dass es ein Hash ist, kein Array von Hashes. Array hat nicht die Methode with_indifferent_access, aber Hash tut.

Ändern Sie Ihre Eingabe, um die richtige Struktur und alles sollte gut sein.

+0

Benutzer kann nur über json registriert werden, verstehe ich immer noch nicht sehr gut, ich änderte die ensreeco_attributes nur zu endereco und diesmal hatte ich die Rückkehr Endereco (# 42380200) erwartet, bekam Array (# 18448440) –

1

Mein json falsch war ... wo ich mit [] und sollte nicht

"endereco_attributes": [{... }] 

korrekt Dank

"endereco_attributes": {... } 

war.

Verwandte Themen