2011-12-19 53 views
0

我有一个用户模型,它带有一个id,name和url属性以及一个带有id和show_my_url字段的关联首选项模型。to_json有条件:除了在rails中

我想呈现我的用户作为json,但只包含url属性如果user.preferences.show_my_url是'真'。

如何根据首选项删除用户url属性,以便它不包含在to_json呈现中。

+0

最简单的方法是重载'to_json'方法,如果你不需要一个默认 – Bohdan 2011-12-19 14:02:06

回答

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

感谢,作品完善。 – nvano 2011-12-19 14:14:58

1

我想你要找的是串行器:JSON Serializers in ActiveRecord。这是做到这一点的正确方法。

所以对于你的问题,你可以实现这样的事情在你的用户等级:

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