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

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

在我的帐户模型中,我有

 def as_json(options = {}) super( :except => [ :password ] ) end 

在我的控制器中我有

 format.json { render :json => @account, :status => 200 } 

例如,当我向/account/1.json发出请求时,我还返回了密码属性,出于安全原因,我不想要。

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


我能做到这一点并且有效

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

但我需要重构

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

 format.json { render :json => @account, :except => :password } 

如果您需要多个动作而不是覆盖会更好:

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

同样适合as_json

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

最好的解决方案是覆盖模型中的as_json方法,如下所示:

 def as_json options={} super( include: {ADD THE RELATIONS YOU WANT TO INCLUDE}).merge({YOU CAN MERGE EXTRA PARAMETER HERE}) end 

您可以使用(这意味着您列出的唯一参数将返回)或使用except (这意味着返回除列出的参数之外的所有参数)。