2012-08-10 10 views
6

Podczas korzystania z accepts_nested_attributes_for, zamiast przekazywania "atrybutów podrzędnych", chciałbym przekazać "dziecko". Jestem pewien, że jeśli włożyłbym dużo logiki do kontrolera, aby stworzyć rekordy i dzieci, mógłbym to zrobić. Jednakże, starając się utrzymać kontrolery w czystości i logice, gdzie powinien być, w tym przypadku model, chciałbym wiedzieć, jak przełączać szyny 3 wokół, aby użyć tej składni podczas wykonywania testu POST lub PUT.Szyny 3 W jaki sposób można zezwolić na przekazywanie zagnieżdżonych atrybutów bez oznaczenia _attributes

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

Raczej

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

Czy mogę zapytać, dlaczego chcesz to zmienić? – Robin

+1

Istnieje powód tej konwencji, ponieważ atrybut "child" w rzeczywistości odnosi się do kolekcji obiektów "Child", a nie atrybutów obiektów "Child". Atrybut "child_attributes' służy do wyjaśnienia zamiaru. – PinnyM

+0

Mam zamiar brnąć tutaj. Typ obiektu, który jest przekazywany, powinien wystarczyć do określenia zamiaru. Ponadto, ponieważ nie ma klas w JSON, użycie '_attributes' w rzeczywistości niczego nie usuwa. – user1158559

Odpowiedz

4

Ewidentnie, to nie może być zrobione.

+0

Myślę, że jesteś jedyną osobą w Stack, która przyznaje, że czegoś nie da się zrobić –

1

Sufiks _attributes nie dodaje wartości do żądań i odpowiedzi JSON, ale aby pozbyć się go w warstwie modelu, trzeba będzie mieć poprawkę małpa ActiveRecord. Wszyscy nie cierpią małpiących poprawek relacji ActiveRecord.

Co powiesz na zrobienie tego w warstwie kontrolera?

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

# snip 

# ApplicationController 

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

Edytuj: Gotowe. Mikser kontrolera jest tutaj: https://gist.github.com/johncant/6056036

Powiązane problemy