Копирование экземпляров модели в 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)
Другие вопросы по тегам