Rails: дублировать запись и ее многоуровневые ассоциации? - PullRequest
2 голосов
/ 22 июня 2011

Я создаю приложение для опросов и пытаюсь создать функцию дублирования, чтобы пользователи могли дублировать опросы.

Что мне нужно сделать, это продублировать опрос, вопросы этого опроса и ответы на каждый вопрос (например, варианты с несколькими вариантами ответов).

Вот мои ассоциации:

#Survey
has_many :questions

#Question
belongs_to :survey
has_many :answers

#Answer
belongs_to :question

Итак, как мне дублировать / клонировать опрос, а также его ассоциации?

Я использую Rails 3.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Что-то вроде:

#Survey
has_many :questions, :autosave => true   # might need the autosaves, might not

#Question
belongs_to :survey
has_many :answers, :autosave => true

#Answer
belongs_to :question


class Survey < ActiveRecord::Base

  def deep_copy(klass)
     klass.questions.each do |question|
        @question = self.questions.build(:name => question.name)
        question.answers.each do |answer|
           @question.answers.build(:name => answer.name)
        end
     end
  end
end

Чтобы использовать его, сделайте что-то вроде:

@survey_to_copy = Survey.find(123)
@new_survey = Survey.new(:name => "new survey")
@new_survey.deep_copy(@survey_to_copy)
@new_survey.save
0 голосов
/ 23 июля 2011

Не уверен, совместим ли он с Rails 3, но вам стоит взглянуть на https://github.com/openminds/deep_cloning

...