【发布时间】:2017-06-07 18:13:16
【问题描述】:
我想在每次将子对象添加到父对象(has_many 关联)时运行before_save 或after_add 回调。在回调中,我想根据所有子级(课程)的end_date 属性在父级(队列)上设置end_date 属性。
class Cohort < ActiveRecord::Base
has_many :courses
before_save :update_end_date
def update_end_date
self.end_date = courses.order(:end_date).last.try(:end_date)
end
end
我遇到的问题是课程尚未在before_save 回调中保存到数据库中,因此courses.order(:end_date) 不会返回新添加的课程。
我可以使用几种解决方法(例如,使用 Ruby courses.sort_by 方法或使用 after_save 和 update),但我的印象是,如果可能的话,使用 Active Record order 方法会更好在效率和最佳实践方面。有没有办法在before_save 中使用 Active Record 来做到这一点,或者什么可能是最好的做法?这似乎会出现很多,但我很难找到适合我的解决方案,所以我觉得我一定是想错了。谢谢!
【问题讨论】:
标签: ruby-on-rails-4 activerecord callback associations has-many