【问题标题】:How to change values overriding the 'to_json' method?如何更改覆盖“to_json”方法的值?
【发布时间】:2011-07-06 19:48:33
【问题描述】:

我正在使用 Ruby on Rails 3,我想覆盖 to_json 方法。

这个时候我使用下面的代码是为了避免导出重要信息。

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

如果我想使用该方法更改值,我该怎么做?

比如我想把用户名大写

:name => name.capitalize

关于检索这个

@user.to_json

【问题讨论】:

标签: ruby-on-rails ruby json ruby-on-rails-3 overriding


【解决方案1】:

如果你想在 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 的好帖子。

【讨论】:

  • FWIW,在 Rails 3.1.3 中调用user.to_json 时,我看到as_json 接收nil 作为选项参数,所以我添加options ||= {} 作为我的第一行自定义as_json 方法。
【解决方案2】:

【讨论】:

  • 我需要def to_json ...(在我的模型中)而不是konata.to_json(:methods =&gt; :permalink)(在控制器或其他任何地方)
  • 哦,所以你想覆盖默认的to_json?我认为这很好。
  • 我尝试了多次测试,但总是出错。拜托,你能给我一个工作的例子吗?
  • 我认为 Iashleigh 在这里链接的问题很有用。如果你使用的是 Rails3,你可能应该重写 as_json,正如那里提到的那样。
猜你喜欢
  • 2012-11-15
  • 2011-02-04
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2015-01-23
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多