在 respond_with 哈希中包含虚拟属性

发布于 2024-10-26 01:08:52 字数 546 浏览 0 评论 0原文

我试图在 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

重要的是,我将“data”作为“employees”集合的 json 根,并且将“总计”包含在哈希值中。这运行良好,并返回所有员工和总价值的良好 JSON 结果。

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

感谢您抽出时间!

I am trying to include a virtual attribute/method within a respond_to JSON hash.

The Model (employee.rb)

attr_reader :my_method

def my_method
  return "foobar"
end

The Controller (employees_controller.rb)

respond_to :json

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

It is important that I have "data" as the json root for the collection of "employees" and also to include the "total" within the hash. This works well and returns a nice JSON result of all the employees and the total value.

My qustion is: How do I include the virtual attribute "my_method" for each employee within the employees hash in the JSON response?

Thanks for your time!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爺獨霸怡葒院 2024-11-02 01:08:52

这对我有用。

Employee.rb

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

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

This is what worked for me.

Employee.rb

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

Thanks for cmason for pointing me in the right direction. Any other solutions are welcome.

香草可樂 2024-11-02 01:08:52

在 Rails 3 中可以使用以下

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

In Rails 3 one can use following

@yourmodel.to_json(methods: ['virtual_attr1', 'virtual_attr2']
多情出卖 2024-11-02 01:08:52

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

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

Overwriting as_json in your model should do the trick:

def as_json(options={})
  { :methods=>[:my_method] }.merge(options)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文