Ищете способ вернуть все вложенные ассоциации, используя deep_clonable - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть вложенная ассоциация, где у меня есть Рубрика> Индикатор> Вопрос.В этом гистограмме вы можете видеть, как я правильно прохожу ассоциацию, затем пытаюсь клонировать объект и его ассоциации.Однако обратите внимание, у меня есть пустой массив для klone.questions.Я могу сделать klone.indicators.first.questions и получить все вопросы, связанные с первым индикатором, но я ищу способ получить все вопросы, связанные с рубрикой (в данном случае клон).

https://gist.github.com/1389697

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Я предполагаю, что вы используете has_many :questions, :through => :indicators. Есть ли вероятность, что это не совместимо с тем глубоким клоном, который вы используете? Что вы получаете с klone.indicators.first.questions?

0 голосов
/ 02 декабря 2011

Похоже, что deep_clonable не может обрабатывать has_many: через ассоциации типов.В итоге я сделал это вручную:

  def create
template = Template.find params[:template][:id]
params[:section_ids].each do |section|
  @rubric = Rubric.new(template.attributes.merge(:name => template.name))
  @rubric.section_id = section
  @rubric.save
  template.indicator_templates.each do |i|
    indicator = Indicator.new(:name => i.name, :rubric_id => @rubric.id)
    indicator.save
    i.question_templates.each do |q|
      question = Question.new(:name => q.name, :indicator_id => indicator.id)
      question.save
    end
  end
end
if @rubric.save
  redirect_to rubrics_path, :notice => "Successfully created rubric."
else
  render :action => 'new'
end
end

Так что для 3 моделей, которые я пытаюсь клонировать (рубрики, индикаторы и вопросы), я создал 3 другие модели, которые в основном имитируют эти модели.Я назвал их Template (для рубрики), IndicatorTemplate (для индикаторов) и QuestionTemplate (для вопросов).Затем я создаю новую рубрику и прохожу индикаторы и вопросы, создавая правильные ассоциации по пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...