我正在使用Ruby on Rails 3,我想覆盖(可能在模型文件中)as_json
或to_json
方法,以便respond_to
一个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
}
但我需要重构。
答案 0 :(得分:13)
如果只有一个动作,你可以尝试:
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
答案 1 :(得分:0)
最佳解决方案是覆盖模型中的 as_json 方法,如下所示:
def as_json options={}
super(
include: {ADD THE RELATIONS YOU WANT TO INCLUDE}).merge({YOU CAN MERGE EXTRA PARAMETER HERE})
end
您可以使用 (这意味着您列出的唯一参数将返回)或使用除(这意味着返回除列出的参数之外的所有参数) )。