#ruby-on-rails #activerecord #enums
#ruby-on-rails #activerecord #перечисления
Вопрос:
Я выполняю запрос ActiveRecord с объединением. У меня есть опросы, состоящие из вопросов (где я сохраняю ответ). Я хотел бы ограничить / выбрать записи, в которых указано значение (статус) enum’d по вопросу. равно «nil», поскольку оно не было задано пользователем.
Я могу получить соединение, возвращающее то, что я хочу, за исключением ограничения значением перечисления «nil» или «».
Вот модель опроса:
class Survey < ApplicationRecord
enum question_one_response: { very_dissapointed: 0, somewhat_dissapointed: 1, not_dissapointed: 2 }
belongs_to :product
has_one :survey_request
has_many :questions
accepts_nested_attributes_for :questions
validates :questions, :presence => true
end
Вот модель вопроса:
class Question < ApplicationRecord
enum status: { useful: 0, not_useful: 1, archived: 2 }
belongs_to :survey
end
статус — целое число
Вот код, который «работает», но не включает требование «nil»:
@response = Question.joins(:survey).where('surveys.product_id = ? and surveys.question_one_response = ? and questions.question_number = ?', @product.id, 1, 4)
Вот несколько вариантов, которые я пробовал без какого-либо успеха:
@response = Question.joins(:survey).where('surveys.product_id = ? and surveys.question_one_response = ? and questions.question_number = ? and questions.status = ?', @product.id, 1, 4, nil)
@response = Question.joins(:survey).where('surveys.product_id = ? and surveys.question_one_response = ? and questions.question_number = ? and questions.status = ?', @product.id, 1, 4, "")
@response = Question.joins(:survey).where('surveys.product_id = ? and surveys.question_one_response = ? and questions.question_number = ? and questions.status = ?', @product.id, 1, 4, blank?)
Комментарии:
1. с какой ошибкой вы столкнулись? первый запрос должен работать
@response = Question.joins(:survey).where('surveys.product_id = ? and surveys.question_one_response = ? and questions.question_number = ? and questions.status = ?', @product.id, 1, 4, nil)
Ответ №1:
Вы должны использовать либо
Question
.joins(:survey)
.where(surveys: { product_id: @product.id })
.where(surveys: { question_one_response: 1 })
.where(question_number: 4)
.where(status: nil)
или….
Question
.joins(:survey)
.where(surveys: { product_id: @product.id })
.where(surveys: { question_one_response: 1 })
.where(question_number: 4)
.where('status IS NULL')