Activerecord Query ищет нулевое перечисление - PullRequest
1 голос
/ 21 апреля 2019

Я делаю запрос ActiveRecord с объединением. У меня есть опросы, которые состоят из вопросов (где я храню ответ). Я хотел бы ограничить / выбрать записи, где значение enum'd (статус) в вопросе. это «ноль», так как он не был установлен пользователем.

Я могу получить объединение, возвращающее то, что я хочу, за исключением ограничения значением enum значения "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 Ответ

1 голос
/ 21 апреля 2019

Вы должны использовать либо

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...