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

Xia*_*Guo 3 ruby activerecord json ruby-on-rails

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

respond_with foo_list :only => [:id, :name], :methods => []
Run Code Online (Sandbox Code Playgroud)

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

foo_list = Foo.select("count(bar) as dattr1, sum(adafsd) as dattr2")....
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

bke*_*ner 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)
Run Code Online (Sandbox Code Playgroud)