私は、id、name、url属性を持つUserモデルとidとshow_my_urlフィールドを持つ関連するPreferencesモデルを持っています。to_json with条件付き:レール内以外
ユーザをjsonとしてレンダリングしたいが、user.preferences.show_my_urlが 'true'の場合はurl属性のみを含める。
どのように私はto_jsonのレンダリングに含まれていないように、設定に基づいてユーザーのurl属性を削除できますか?
私は、id、name、url属性を持つUserモデルとidとshow_my_urlフィールドを持つ関連するPreferencesモデルを持っています。to_json with条件付き:レール内以外
ユーザをjsonとしてレンダリングしたいが、user.preferences.show_my_urlが 'true'の場合はurl属性のみを含める。
どのように私はto_jsonのレンダリングに含まれていないように、設定に基づいてユーザーのurl属性を削除できますか?
def to_json(opts={})
except = [] # Standard except, may contain some stuff you want to exclude
except << :url unless self.preferences.show_my_url
super(opts.merge(:except => except))
end
おかげで、作品を必要としない場合は 'to_json'メソッドをオーバーロードすることです完璧。 – nvano
あなたが探しているのは、シリアライザ:JSON Serializers in ActiveRecordです。これが正しい方法です。あなたの問題のためにそう
は、あなたのユーザークラスにこのような何かを実装することができます:def as_json
preferences.try(:show_my_url) ? to_json : to_json(:except => :url)
end
最も簡単な方法は、あなたがデフォルトに1人の – Bohdan