2011-03-01 75 views
6

我正在使用Ruby on Rails 3,我想重写to_json方法。如何更改覆盖'to_json'方法的值?

此时我使用下面的代码,以避免导出重要信息。

def to_json 
    super(
     :except => [ 
     :password 
     ] 
    ) 
    end 

如果我想用这种方法改变一个值,我可怎么办?

例如,我想利用用户名

:name => name.capitalize 

上检索该

@user.to_json 
+0

类似的问题在这里,可能会有所帮助。 http://stackoverflow.com/questions/4703509/how-to-customize-the-to-json-method-in-rails3 – lashleigh 2011-03-01 21:18:01

回答

0
+0

我需要'def to_json ...'(在我的模型中)而不是'konata。 to_json(:methods =>:permalink)'(在控制器或其他地方) – user502052 2011-03-01 21:13:29

+0

哦,所以你想重写默认的to_json?我想,这很好。 – rmk 2011-03-01 21:19:34

+0

我尝试了多个测试,但我总是得到错误。请,你能让我成为一个工作的例子吗? – user502052 2011-03-01 21:21:22

10

如果您在控制器中为Rails 3要render :json => @user,你可以在模型覆盖as_json

class User < ActiveRecord::Base 
    def as_json(options={}) 
    result = super({ :except => :password }.merge(options)) 
    result["user"]["name"] = name.capitalize 
    result 
    end 
end 

以下是关于differences between to_json and as_json好的帖子。

+1

FWIW,在调用'user.to_json'时,在Rails 3.1.3中,我看到'as_json'收到options参数的'nil',所以我添加了'options || = {}'作为我的第一行自定义'as_json'方法。 – 2012-04-12 03:03:57

+0

这也适用于3.0应用程序。很好的答案,挑选它! – pjammer 2012-05-22 16:35:48