在after_save回调中修改同一类的has_many模型

时间:2014-05-02 17:39:11

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

所以我有这个课程:

class Element < ActiveRecord::Base                                                                                     

  after_save :update_related_elements_pages                           

  belongs_to :page, counter_cache: true                               

  belongs_to :element, counter_cache: true                            
  has_many :elements

  def update_related_elements_pages
    self.elements.each do |rel_elem|       
      rel_elem.page_id = self.page_id
      rel_elem.save
    end
  end

end

现在,当我更新元素的Page关联时,我希望属于当前元素的所有元素也具有更新的关系。如您所见,我尝试使用回调来实现此目的。

调用回调但不幸的是,self.elements为空。我错过了什么?有一个更好的方法吗?我也可以在控制器中执行此操作,如果它更合适的话。

1 个答案:

答案 0 :(得分:1)

尝试创建连接模型并使用has_many :through来处理自引用关系。

这是一个优秀的Railscast解释它比我在这里更好:http://railscasts.com/episodes/163-self-referential-association

另一种资源:http://blog.flatironschool.com/post/66285912527/self-referential-associations-aka-self-joins