如何解决将has_many关系的总和添加到模型的属性
|| 我有以下示例(简化的模型),并希望在对象的to_json方法中访问\'spent \'值,理想情况下作为对象的属性。class Task < ActiveRecord::Base
has_many :hours
def spent
self.hours.sum(:spent)
end
end
有没有一种方法,而无需定义方法和修改to_json方法呢?我一直在寻找一种使用范围的方法或通过破解after_initialize方法,但是当在模型上使用inspect或to_json时,这些方法都没有提供“花费”的值。
我也需要通过关系在使用has_many的树的更高模型上解决此问题。
解决方法
您可以使用
:methods
参数进行to_json调用。
object.to_json(:methods => :spent)
http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
, 我能找到的最佳解决方案是重写\'as_json \'方法以包括我需要的属性或执行所需的逻辑(在这种情况下,has_many关系的总和)。
class Task < ActiveRecord::Base
...
def as_json(options = { })
options = {} if options.nil?
self[:job_id] = self.phase.job_id
self[:spent] = self.hours.sum(:spent)
super(options)
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。