#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})
Возможно, это не самый красивый код, но он должен сработать.