Первый раз что-то строил с Ruby on Rails и немного потерял при реализации "has_many through"
В этом приложении у меня есть Вопросы, DailyQuestionSets (для каждого дня будет один DailyQuestionSet) и DailyQuestions (таблица ссылок «многие ко многим», так что DailyQuestionSets может иметь несколько Вопросов.
(я понимаю, что эти названия таблиц / моделей плохие, любые предложения по улучшению приветствуются:)
Я застрял на шаге создания метода в приложении DailyQuestionSet с именем get_today_dailyquestionset, который отправляется в базу данных, чтобы посмотреть, существует ли DailyQuestionSet для этого дня, если нет, то создайте его и верните его Свойство .questions, заполненное всеми вопросами из базы данных.
(позже я изменю это с получения всех вопросов на выбор 3 случайных вопросов каждый день)
class Question < ApplicationRecord
has_many :dailyquestions, foreign_key: 'dailyquestion_id'
has_many :dailyquestionsets, :through => :dailyquestions
default_scope -> { order(created_at: :desc) }
end
class DailyQuestion < ApplicationRecord
belongs_to :daily_question_set
belongs_to :question
end
class DailyQuestionSet < ApplicationRecord
has_many :daily_questions, foreign_key: 'question_id'
has_many :questions, :through => :daily_questions, :source => :question
def self.get_today_dailyquestionset
@dailyquestionset_list = DailyQuestionSet.where('posed_date BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all
if @dailyquestionset_list.count == 0
@dailyquestionset = DailyQuestionSet.new(posed_date: DateTime.now)
@dailyquestionset.save
end
@questionlist = Question.all
@questionlist.each do |q|
@dailyquestionset.questions << q
end
return @dailyquestionset_list[0]
end
end
Я получаю эту ошибку, которая, как я понимаю, означает, что объекты Question, возвращаемые из Question.all, не имеют набора DailyQuestionSet, связанного с ними. Что имеет смысл. Но я не могу найти способ создать отношение «многие ко многим» для каждого вопроса, прежде чем добавить его в массив .questions.
ERROR["test_create_daily_daily_question_set_if_not_already_existing", DailyQuestionSetTest, 1.0837379119993784]
test_create_daily_daily_question_set_if_not_already_existing#DailyQuestionSetTest (1.08s)
ActiveRecord::RecordInvalid: ActiveRecord::RecordInvalid: Validation failed: Daily question set must exist
app/models/daily_question_set.rb:20:in `block in get_today_dailyquestionset'
app/models/daily_question_set.rb:19:in `get_today_dailyquestionset'
test/models/daily_question_set_test.rb:11:in `block in <class:DailyQuestionSetTest>'