在Rails 4.1中,如何通过枚举符号查找记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Rails 4.1中,如何通过枚举符号查找记录?相关的知识,希望对你有一定的参考价值。

假设我有这个模型:

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

如何在不使用枚举的数值或不必迭代每个对话的情况下找到所有活动对话?

我尝试过做Conversation.where(status: :active),但它没有产生任何结果。

想到的唯一解决方案是迭代所有对话并选择活动对话,但它看起来不是一个好的解决方案。

Conversation.all.select {|conversation| conversation.active? }  

我能做些什么吗?

答案

ActiveRecord::Enum根据其价值提供范围。

试一试:

Conversation.active

要么

Conversation.archived

当然,您可以像Kyle Decot一样创建自己的范围。

另一答案

这非常有效:

Conversation.where("conversation.status = ?", Conversation.statuses[:active])

由于某种原因,这不起作用:

Conversation.where(status: :active) #searches for NULL
Conversation.where(status: 'active') #searches for status=0 no matter what the enum

更新

以上所有语句都适用于Rails 5.快乐的编码!

另一答案

ActiveRecord::Enum根据值提供内置范围,因此您可以简单地执行以下操作:

Conversation.active
Conversation.archived
另一答案
Conversation.where(status: Conversation.statuses[:active])
另一答案

你尝试过Conversation.where(status: [:active, :archived])吗?正如上市here

另一答案

试试这个:

.enum :status => {:active => "active", :archived => "archived"ok_off => "took off"}

以上是关于在Rails 4.1中,如何通过枚举符号查找记录?的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能使用符号而不是字符串来访问 Rails 模型属性?

Rails - 如何查找单个记录(用户名)在主页中向任何访问者显示它

rails 4.1 无法通过 capistrano 3 部署

想在 Rails 中查找没有关联记录的记录

如何在 Rails 3 的 Postgres 数据库中使用枚举? [关闭]

Rails 3:获取随机记录