2011-12-19 28 views
0

私は、id、name、url属性を持つUserモデルとidとshow_my_urlフィールドを持つ関連するPreferencesモデルを持っています。to_json with条件付き:レール内以外

ユーザをjsonとしてレンダリングしたいが、user.preferences.show_my_urlが 'true'の場合はurl属性のみを含める。

どのように私はto_jsonのレンダリングに含まれていないように、設定に基づいてユーザーのurl属性を削除できますか?

+0

最も簡単な方法は、あなたがデフォルトに1人の – Bohdan

答えて

1
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 
+0

おかげで、作品を必要としない場合は 'to_json'メソッドをオーバーロードすることです完璧。 – nvano

1

あなたが探しているのは、シリアライザ:JSON Serializers in ActiveRecordです。これが正しい方法です。あなたの問題のためにそう

は、あなたのユーザークラスにこのような何かを実装することができます:

def as_json 
    preferences.try(:show_my_url) ? to_json : to_json(:except => :url) 
end