Как создать экземпляр класса в Rails, давая каждому новому экземпляру 5 has_many через отношения - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу, чтобы экземпляр моего Test класса получил пять практических вопросов через класс соединения, когда он будет инициализирован.Если тест является «экзаменом», то он должен просто получить 5 экзаменационных вопросов без вступительного класса.(типы вопросов имеют разные модели)

Пока что он не ведет себя так, как я ожидаю

self.practice_questions = []

он делает 5 классов соединения каждый раз, но массив self.practice_questions остаетсяпусто.

def get_questions
  puts "ASDASDASDASDSAD"
  array = []
  if self.for_practice
    puts "ASDASDASOASKODKSAOKDASODKOASKDSAOKDOASKDOASK"

    PracticeQuestion.sort_for_selection[0...5].each do |question|
      array << question
      question.use_practice_question
    end
  elsif for_practice === false
    puts self.exam_questions
    if self.exam_questions.length ===0
     grab 5 unused exam type questions
     ExamQuestion.unused[0...5].each do |question|
     puts "grabbing question #{question.title}"
     question.test = self
     question.use_question
    end
  end
  puts "hello"
  puts self.practice_questions.length
  self.practice_questions ||= array
  self.save
  puts self.practice_questions.length

  self.practice_questions.each {|question| puts question.title}
end

1 Ответ

0 голосов
/ 19 февраля 2019

self.practice_questions ||= array назначит массив только в том случае, если self.practice_questions равно false или равно nil. Вы уверены, что это один из них?

Если practice_questions является has_many, попробуйте один из следующих вариантов:

array.each do |el|
  self.practice_questions << el
end

или:

self.practice_questions_ids = array.map(&:id)

https://guides.rubyonrails.org/association_basics.html#has-many-association-reference

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