Похоже, что deep_clonable не может обрабатывать has_many: через ассоциации типов.В итоге я сделал это вручную:
def create
template = Template.find params[:template][:id]
params[:section_ids].each do |section|
@rubric = Rubric.new(template.attributes.merge(:name => template.name))
@rubric.section_id = section
@rubric.save
template.indicator_templates.each do |i|
indicator = Indicator.new(:name => i.name, :rubric_id => @rubric.id)
indicator.save
i.question_templates.each do |q|
question = Question.new(:name => q.name, :indicator_id => indicator.id)
question.save
end
end
end
if @rubric.save
redirect_to rubrics_path, :notice => "Successfully created rubric."
else
render :action => 'new'
end
end
Так что для 3 моделей, которые я пытаюсь клонировать (рубрики, индикаторы и вопросы), я создал 3 другие модели, которые в основном имитируют эти модели.Я назвал их Template (для рубрики), IndicatorTemplate (для индикаторов) и QuestionTemplate (для вопросов).Затем я создаю новую рубрику и прохожу индикаторы и вопросы, создавая правильные ассоциации по пути.