Если вы уже связываете их с категорией, почему их также нужно связать с заявкой?Если вам нужна гранулярность привязки к заявке, просто используйте эту связь, чтобы получить все задачи в категории.Привязка их к обоим просто усложняет сайт.Теперь, если вам абсолютно необходимо связать их с обоими, вы должны создать таблицу назначений для них, в которой хранятся category_id, task_id.Еще одна таблица назначений для ticket_id, task_id.Затем сохраните задачу как одну запись, как предполагается, для дублирования данных.
Ваш код выглядит нормально по большей части.Я не думаю, что вам нужно все в конце.Ассоциации будут автоматически загружать все, на что вы ссылаетесь в этой модели.
Хотя попробуйте вместо этого использовать метод построения ассоциации:
def duplicate_tasks_to_ticket
if self.tasks.blank?
for task in self.category.tasks.all
self.tasks.build(:name => task.name)
end
self.save
end
end
Сборка создает новый объект этой ассоциации, назначаявнешний ключ для вас.Затем вы просто вызываете save для родительской модели, и она выполнит все правильные операторы вставки.