Mir*_*318 2 scope ruby-on-rails
我enum在users表中使用一列。我希望能够找到所有未挂起的用户。这是我当前的代码:
enum approval_status: [:pending, :approved, :declined]
User.where.not(approval_status: :pending)
Run Code Online (Sandbox Code Playgroud)
但是,SQL查询变为:
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE (`users`.`approval_status` != NULL)
Run Code Online (Sandbox Code Playgroud)
无论我输入什么枚举值,SQL都将其转换为 NULL
我如何获得所有用户,但不包括approval_status列的特定值?
在Rails 6中,将负范围添加到枚举值上。
您可以像这样使用它:
User.not_pending
User.not_approved
User.not_declined
Run Code Online (Sandbox Code Playgroud)
相关拉取要求
在这种情况下,Rails 无法处理符号。然而,字符串工作正常字符串也被破坏,但以不同的方式:
enum approval_status: [:pending, :approved, :declined]\n\nUser.where.not(approval_status: :pending) //breaks\nUser.where.not(approval_status: \'pending\') //returns 0 no matter what the string is.\nRun Code Online (Sandbox Code Playgroud)\n\n更新
\n\n上面的答案实际上不起作用。任何字符串都会返回0(所以如果您正在寻找第一个枚举,它似乎可以工作)。
以下内容将实际使用您的枚举:
\n\nUser.where.not("user.approval_status = ?", User.approval_statuses[:pending])\nRun Code Online (Sandbox Code Playgroud)\n\n注意\xe2\x80\x94Rails 5 将有更好的枚举范围支持。
\n| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |