1

我有BaseProjectProjectTemplate并且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") )

但我读了这个建议反对第二种解决方案的问题。

解决此问题的推荐方法是什么?

4

1 回答 1

0

我认为不会有比 , 方法“更好”的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)
于 2013-03-28T13:53:00.297 回答