2012-08-10 17 views
6

Cuando uso accept_nested_attributes_for, en lugar de tener que pasar "child_attributes", me gustaría pasar "child". Estoy bastante seguro de que si pongo mucha lógica en mi controlador para crear los registros y los niños, podría lograr esto. Sin embargo, en un esfuerzo por mantener mis controladores limpios y la lógica donde debería estar, el modelo en este caso, me gustaría saber cómo cambiar los rieles 3 para usar esta sintaxis al hacer un POST o PUT.Rails 3 ¿Cómo puedo permitir que los atributos anidados se pasen sin la designación _attributes

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

En lugar

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

¿Puedo preguntar por qué quiere cambiar esto? – Robin

+1

Hay una razón para esta convención, ya que el atributo 'child' en realidad se refiere a la colección de objetos' Child', no a los atributos de los objetos 'Child'. El atributo 'child_attributes' se usa para aclarar la intención. – PinnyM

+0

Voy a vadear aquí. El tipo de objeto que se pasa debe ser suficiente para determinar el intento. Además, dado que no hay clases en JSON, el uso de '_attributes' no borra nada. – user1158559

Respuesta

4

Evidentemente, esto no se puede hacer.

+0

Creo que eres el único en Stack que admite que algo no se puede hacer –

1

El sufijo _attributes no agrega ningún valor a las solicitudes y respuestas JSON, pero para deshacerse de él en la capa de modelo, debería tener el parche ActiveRecord. Todo el mundo odia las relaciones ActiveRecord con parches de mono.

¿Qué tal si lo haces en la capa de control?

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

# snip 

# ApplicationController 

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

Editar: Listo. El controlador está aquí: https://gist.github.com/johncant/6056036

Cuestiones relacionadas