将 has_many 关系的总和添加到模型的属性中
我有以下(简化模型),并希望访问对象的 to_json 方法中的“花费”值,最好作为对象的属性。
class Task < ActiveRecord::Base
has_many :hours
def spent
self.hours.sum(:spent)
end
end
有没有一种方法可以在不定义方法和破解 to_json 方法的情况下执行此操作?我一直在寻找一种使用范围的方法或通过破解 after_initialize 方法,但在模型上使用检查或 to_json 时,这些方法都没有提供“已用”值。
我也需要通过关系在使用 has_many 的树上更高的模型上解决这个问题。
I have the following (simplified model) and wish to access the 'spent' value in the to_json method of the object, ideally as an attribute of the object.
class Task < ActiveRecord::Base
has_many :hours
def spent
self.hours.sum(:spent)
end
end
Is there a way to do this without defining a method and hacking the to_json method? I've been hunting for a way to use scope or by hacking the after_initialize method, but none of these methods provide a 'spent' value when using inspect or to_json on the model.
I need to solve this on models higher up the tree that use a has_many, through relationship too.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
:methods
参数来调用 to_json。http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
You can use the
:methods
parameter to to_json call.http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
我能找到的最佳解决方案是重写“as_json”方法以包含我需要的属性,或执行所需的逻辑(在本例中是 has_many 关系的总和)。
The best solution I could find to this was overriding the 'as_json' method to include the attributes that I needed, or to perform the logic required, (in this case the sum of the has_many relationship).