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") )

しかし、2番目の解決策に反対することを推奨するこの質問を読みました。

この問題を解決するための推奨される方法は何ですか?

4

1 に答える 1

0

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)
于 2013-03-28T13:53:00.297 に答える