Копирование экземпляров модели в Rails с наследованием одной таблицы
Я имею BaseProject
, ProjectTemplate
а также Project
class ProjectTemplate << BaseProject; end
class Project << BaseProject; end
Я хотел бы скопировать атрибуты project_template в новый экземпляр проекта по умолчанию.
Проблема в том, если я использую dup
проект будет иметь type
установлен в ProjectTemplate
project_template = ProjectTemplate.first
project = project_template.dup
я могу установить тип вручную
project.type = "Project"
но мне это не нравится, или я могу это сделать
project_template = ProjectTemplate.first
project = Project.new( project_template.attributes.except("id", "type") )
но я прочитал этот вопрос, который рекомендует против второго решения.
Каков был бы рекомендуемый способ решить эту проблему?
1 ответ
Решение
Я не думаю, что будет "лучший" способ, которым dup
, type=
подход. Вы можете создать метод класса в Project, который затем можно использовать всякий раз, когда вам нужно создать проект:
class Project < BaseProject
def new_from_template(template)
project = template.dup
project.type = 'Project'
project
end
end
Тогда вам просто нужно использовать это:
project = Project.new_from_template(ProjectTemplate.first)