如何覆盖'as_json'或'to_json'方法以便'respond_to'而不包含指定的信息?

use*_*052 10 ruby security json ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3,我想覆盖(可能在模型文件中)as_jsonto_json方法,以便在respond_to不包含某些信息的情况下进行HTTP请求.

在我的帐户模型中,我有

def as_json(options = {})
  super(
    :except => [
      :password
    ]
  )
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有

format.json {
  render :json => @account, :status => 200
}
Run Code Online (Sandbox Code Playgroud)

例如,当我提出请求时,/account/1.json我还要回到密码属性,出于安全考虑,我不想要.

那么,如何防止包含指定信息?


我能做到这一点并且有效

format.json {
  render :json => @account.to_json(:except => [:password]), :status => 200
}
Run Code Online (Sandbox Code Playgroud)

但我需要重构.

tom*_*sop 13

如果它只在一个动作中你可以尝试:

format.json { render :json => @account, :except => :password }
Run Code Online (Sandbox Code Playgroud)

如果您需要多个动作,那么覆盖会更好:

# Exclude password info from json output.
def to_json(options={})
  options[:except] ||= :password
  super
end 
Run Code Online (Sandbox Code Playgroud)

同样适合as_json

# Exclude password info from json output.
def as_json(options={})
  options[:except] ||= :password
  super
end
Run Code Online (Sandbox Code Playgroud)