Come disinfettare un oggetto ottenuto con belongs_to in Rails 3
-
11-10-2019 - |
Domanda
Ho due classi: l'utente e il messaggio. Qui di seguito sono le definizioni:
class Message < ActiveRecord::Base belongs_to :receiver, :class_name => 'User', :foreign_key => 'receiver' belongs_to :sender, :class_name => 'User', :foreign_key => 'sender' end class User < ActiveRecord::Base has_many :incoming_messages, :class_name => 'Message', :foreign_key => 'receiver' has_many :outgoing_messages, :class_name => 'Message', :foreign_key => 'sender' end
Quando ricevo i messaggi nel controller, ho anche ottenere gli oggetti utente in
@message.receiver
e
@message.sender
Questi oggetti contengono alcune informazioni dell'utente (password, ecc) che vorrei rimuovere prima di passarlo alla vista (un oggetto JSON nel mio caso). Qual è il modo migliore di fare questo?
Grazie per l'aiuto.
Soluzione
Se si sta eseguendo il rendering manualmente gli oggetti nella vista, non c'è bisogno per disinfettare -. La risposta conterrà solo gli elementi si espone
Se si sta utilizzando AJAX e to_json, ci sono diversi modi di rimuovere le informazioni. È possibile utilizzare una select nel primo Model.find al fine di garantire che le informazioni senstive non viene effettivamente restituito dalla query. Vedere attivo Record Interrogazione -. I campi di selezione specifici per più
L'alternativa è quella di ignorare il JSON in sé il rendering per visualizzare solo i campi richiesti, utilizzando:
to_json(:only => [ :column, :column ])