寻找一种优雅的方式将ActiveRecord实例同时分配给两个所有者

时间:2014-07-17 11:24:22

标签: ruby-on-rails ruby activerecord metaprogramming

我的rails应用程序中有以下模型关联结构:

class User < ActiveRecord::Base
  has_many :folders
  has_many :notes
end

class Folder < ActiveRecord::Base
 belongs_to :user
 has_many :notes
end

class Note < ActiveRecord::Base
  belongs_to :user
  belongs_to :folder
end

我想要的是打电话

@folder.notes.create()

立即将备注分配给文件夹和文件夹所有者。

换句话说,而不是

@folder = current_user.folders.first
...
@note = Note.new    
@folder.notes << @note
current_user.notes << @note

我想

@folder.notes.create()

实现这一目标的最佳方法是什么?


更新

或者我如何覆盖每个文件夹实例中的备注的创建&lt;&lt; 功能。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,感谢@Sharagoz指点我的回调方向!

after_add回调可以解决问题。

以下是我改变的内容:

class Folder < ActiveRecord::Base
  belongs_to :user
  has_many :notes, after_add: :add_to_user

  def add_to_user(note)
    if(self.user)
      self.user.notes << note
    end
  end
end