2013-03-13 7 views
5

Próbuję utworzyć odpowiedź JSON, który wygląda tak:Szyny model Hash wykluczyć atrybuty

{ 
    "user": { 
    "birthday": "2013-03-13", 
    "email": "[email protected]", 
    "id": 1, 
    "name": null, 
    "username": "example" 
    }, 
    "other_data": "foo" 
} 

Wcześniej, kiedy właśnie wraca użytkownikowi, kiedyś

render :json => @user, :except => [:hashed_password, :created_at, :updated_at] 

do Zachowaj atrybuty hashed_password, created_at i updated_at. Czy istnieje sposób, aby to zrobić, ale także zezwolić na wysyłanie dodatkowych danych razem z użytkownikiem? Właśnie teraz dodaję atrybuty, które chcę wysłać do skrótu, jeden po drugim, ale to oczywiście nie jest idealne.

Odpowiedz

15

Renderowanie danych JSON pierwszy automagicznie nazywa „as_json” modelu, który zwraca hash Ruby. Następnie wywoływana jest funkcja "to_json", aby uzyskać ciąg znaków reprezentujący twój skrót.

Aby osiągnąć to, czego chciał, można nazwać coś takiego:

render :json => { 
    :user => @user.as_json(:except => [:hashed_password]), 
    :some_other_data => {} 
} 

W tym przypadku nie ma żadnego obiektu, który reaguje na „as_json”, więc kontroler właśnie nazywa „to_json”, aby włączyć hasz do łańcucha.

+0

Dokładnie tego, czego szukałem, dzięki za tonę –

Powiązane problemy