在respond_with哈希中包含虚拟属性

时间:2011-03-25 05:25:21

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在尝试在respond_to JSON哈希中包含虚拟属性/方法。

模型(employee.rb)

attr_reader :my_method

def my_method
  return "foobar"
end

控制器(employees_controller.rb)

respond_to :json

def index
  @employees = Employee.all
  respond_with(:data => @employees, :total => Employee.all.count)
end

重要的是,我将“数据”作为“雇员”集合的json根,并在散列中包含“total”。这很有效,并返回所有员工和总价值的良好JSON结果。

我的问题是:如何在JSON响应中为员工哈希中的每个员工包含虚拟属性“my_method”?

谢谢你的时间!

3 个答案:

答案 0 :(得分:14)

这对我有用。

<强> Employee.rb

def as_json(options={})
  super.as_json(options).merge({:my_method => my_method})
end

感谢cmason指出我正确的方向。欢迎任何其他解决方案。

答案 1 :(得分:3)

在Rails 3中,可以使用以下

@yourmodel.to_json(methods: ['virtual_attr1', 'virtual_attr2']

答案 2 :(得分:1)

在模型中覆盖as_json应该可以解决问题:

def as_json(options={})
  { :methods=>[:my_method] }.merge(options)
end