【问题标题】:Copy model instances in Rails with single table inheritance使用单表继承在 Rails 中复制模型实例
【发布时间】:2013-03-28 13:06:28
【问题描述】:

我有BaseProjectProjectTemplateProject

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 建议不要使用第二种解决方案。

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

【问题讨论】:

    标签: ruby-on-rails copy clone sti dup


    【解决方案1】:

    我认为不会有比duptype= 方法“更好”的方法。您可以在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2010-11-18
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多