在我的一个Rails 3控制器中,我需要返回jSON响应,模型上只有几个属性,所以我用了
respond_with foo_list :only => [:id, :name], :methods => []
但仍然在resposne我看到的不仅仅是这两个属性,我注意到那些不受欢迎的属性实际上是从查询选择函数生成的动态属性:
foo_list = Foo.select("count(bar) as dattr1, sum(adafsd) as dattr2")....
有办法解决这个问题吗?或者我必须自己构建哈希?
谢谢!
答案 0 :(得分:6)
执行此操作的传统方法是在ActiveRecord上使用#as_json方法,该方法自动将对象转换为其json表示。
您可以使用您想要的任何属性覆盖它:
def as_json(options = {})
# minimal
if options[:minimal].present?
{id: self.id, name: self.name }
# default
else
super
end
end
...
my_model = MyModel.find(...)
my_model.as_json
my_model.as_json(:minimal)