假设我有这个模型:

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

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

我试着做了Conversation.where(status: :active)次,但没有任何结果.

我想到的唯一解决方案是迭代所有对话并 Select 活动对话,但这看起来不是一个好的解决方案.

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

我能做些什么吗?

推荐答案

ActiveRec或d::Enum根据其值提供作用域.

试试看:

Conversation.active

Conversation.archived

当然,您可以创建自己的作用域,如前所述.

Ruby-on-rails相关问答推荐

Rails7--如何使用内联代码仅为操作运行BEFORE操作

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

序列化来自关联的不可变数据是个好主意吗?

Rails 控制台 - 更新 Gem 后的弃用通知

如何避免 activesupport 中的循环参数引用警告

Rails 将字符串与视图中的变量连接的最佳方法

2个空格或1个制表符,Rails社区的缩进标准是什么?

rails 3:将链接显示为按钮?

如何将自定义过滤器添加到 Active Admin?

Ruby on Rails 的 varchar 迁移问题

如何在 RoR 中实现成就系统

Rails - 生产模式下的错误

Rails:使用 gem 卸载特定版本的库

rails structure.sql和schema.rb有什么区别

你如何覆盖 form_for 助手中的类名?

ActiveRecord 事务中的错误处理?

如何为 Rails 迁移定义布尔字段

使用 ActiveRecord 获取列名

RoR select_tag 默认值和选项