我有这些模特:
class Project < ActiveRecord::Base
has_many :task_links, -> { includes(:task).order("tasks.name") }, dependent: :destroy
has_many :tasks, through: :task_links
class TaskLink < ActiveRecord::Base
belongs_to :project
belongs_to :task
class Task < ActiveRecord::Base
has_many :task_links, dependent: :destroy
has_many :projects, through: :task_links
我想创建一个after_create回调,它将自动为所有活动项目和新创建的任务创建所有task_links。我可以通过循环活动项目并为每个项目创建一个task_link来做到这一点,但我想知道是否有更好的方法来做到这一点?最好使用一个大插入命令而不是xxx。
答案 0 :(得分:0)
我不确定为什么你需要使用after_create
来执行此操作,因为我认为before_create
可以很好地运行。使用before_create
,您可以在保存新task_links
时保存所有task
。
class Task < ActiveRecord::Base
has_many :task_links, dependent: :destroy
has_many :projects, through: :task_links
before_create :create_task_links
def create_task_links
# I'm assuming that the where below satisfies "all active projects"
Project.where(active: true).find_each do |proj|
# build only creates objects but does not save them to your database
self.task_links.build(project: proj)
end
end
end