2013-03-13 17 views
5

Sto cercando di formare una risposta JSON che assomiglia a questo:Rails modello per hash, escludere gli attributi

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

Prima, quando ero appena riportare l'utente, ho usato

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

a mantenere gli attributi hashed_password, created_at e updated_at dall'invio. C'è un modo per farlo, ma anche consentire l'invio di ulteriori dati insieme all'utente? In questo momento sto solo aggiungendo gli attributi che voglio inviare all'hash uno per uno, ma ovviamente non è l'ideale.

risposta

15

Rendering dati JSON chiama prima automagicamente 'as_json' del modello, che restituisce un hash rubino. Dopodiché, viene chiamato 'to_json' per ottenere una rappresentazione in formato stringa del tuo hash.

per ottenere quello che volevi, è possibile chiamare qualcosa di simile:

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

In questo caso, non c'è oggetto che risponde a 'as_json', quindi il controller chiama semplicemente 'to_json' per trasformare la vostra hash a una stringa.

+0

Esattamente quello che stavo cercando, grazie un sacco –

Problemi correlati