Rails 3 as_json:only或:methods选项不适用于动态属性

时间:2011-11-30 02:23:18

标签: ruby-on-rails ruby json activerecord

在我的一个Rails 3控制器中,我需要返回jSON响应,模型上只有几个属性,所以我用了

respond_with foo_list :only => [:id, :name], :methods => []

但仍然在resposne我看到的不仅仅是这两个属性,我注意到那些不受欢迎的属性实际上是从查询选择函数生成的动态属性:

foo_list = Foo.select("count(bar) as dattr1, sum(adafsd) as dattr2")....

有办法解决这个问题吗?或者我必须自己构建哈希?

谢谢!

1 个答案:

答案 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)