我有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") )
但是我读了this question,建议不要使用第二种解决方案。
解决这个问题的推荐方法是什么?
答案 0 :(得分: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)