首页 > 解决方案 > Rails 首先或初始化选择多个枚举

问题描述

状态是一个枚举,我需要找到第一个用户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

但没有一个工作。我该怎么做这个查询?

标签: ruby-on-railsactiverecord

解决方案


要使其工作,请使用以下代码:

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

也许它不是最漂亮的代码,但它应该可以工作。


推荐阅读