Сначала выполнить рельсы или инициализировать выбор нескольких перечислений

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Статус — это перечисление, мне нужно найти первого пользователя, который есть waiting или declined , если такового не существует, инициализировать его

Приведенный ниже код должен работать, но выдает ошибку:

 User.where(status: [:waiting, :declined]).first_or_initialize
=> ArgumentError ('[:waiting, :declined]' is not a valid status)
  

Я предполагаю, что это потому, что статус не может быть массивом символов. Я также пытался:

 User.where(status: [:waiting, :declined]).first_or_initialize({ status: :waiting })
# And 
User.where(status: [:waiting, :declined]).first_or_initialize do |user|
  user.status = :waiting
end
  

Но ни один из них не сработал.
Как я могу выполнить этот запрос?

Комментарии:

1. Я думаю, это потому, что ваш поиск имеет два разных статуса, и rails не может определить, какой из них использовать.

2. Вы пробовали с: User.where(status: :waiting).or(User.where(status: :declined)).first_or_initialize({status: :waiting}) ?

3. @fanta Это тоже мое предположение. Но как я могу указать rails, какой статус использовать? Обоих способов должно быть достаточно, и все же это не работает

4. @MrShemek можете ли вы отправить свой комментарий в качестве ответа? Это сработало

Ответ №1:

Чтобы это заработало, пожалуйста, используйте следующий код:

 User.where(status: :waiting).or(User.where(status: :declined)).first_or_initialize({status: :waiting})
  

Возможно, это не самый красивый код, но он должен сработать.