2012-08-10 13 views
6

Quando si utilizza accept_nested_attributes_for, anziché passare "child_attributes", mi piacerebbe passare "child". Sono abbastanza sicuro che se metterò molta logica nel mio controller per creare i record e i bambini, potrei farlo. Tuttavia, nel tentativo di mantenere i miei controllori puliti e logici dove dovrebbe essere, il modello in questo caso, mi piacerebbe sapere come cambiare i binari 3 in giro per usare questa sintassi quando si fa un POST o PUT.Rails 3 Come posso consentire il passaggio degli attributi nidificati senza la designazione _attributes

{ 
    "name": "test", 
    "child_attributes": [ 
    { 
     "id": 1, 
     "name": "test_child_update" 
    }, 
    { 
     "name": "test_child_create" 
    } 
} 

Piuttosto

{ 
    "name": "test", 
    "child": [ 
    { 
     "id": 1, 
     "name": "test_child_update" 
    }, 
    { 
     "name": "test_child_create" 
    } 
} 
+1

Posso chiedere perché si desidera modificare questo? – Robin

+1

C'è una ragione per questa convenzione, poiché l'attributo 'child' si riferisce effettivamente alla collezione di oggetti' Child', non agli attributi degli oggetti 'Child'. L'attributo 'child_attributes' è usato per chiarire l'intento. – PinnyM

+0

Ho intenzione di guadare qui. Il tipo di oggetto che deve essere passato dovrebbe essere sufficiente per determinare l'intenzione. Inoltre, poiché non ci sono classi in JSON, l'uso di '_attributes' in realtà non cancella nulla. – user1158559

risposta

4

Evidentemente, questo non può essere fatto.

+0

Penso che tu sia l'unico su Stack che ammette che qualcosa non può essere fatto –

1

Il suffisso _attributes non aggiunge alcun valore alle richieste e alle risposte JSON, ma per eliminarlo nel livello del modello, è necessario eseguire il patch Monkey ActiveRecord. Tutti odiano le relazioni ActiveRecord di patch-scimmia.

Come fare nel livello controller?

@comment = Comment.new(attributify(:comment)) 

# snip 

# ApplicationController 

def attributify() 
    # Now I'll go and write this! 
end 

Modifica: Fatto. Il mixin del controller è qui: https://gist.github.com/johncant/6056036

Problemi correlati