ruby-on-rails - 引用连接 Rails 表中枚举的查询

标签 ruby-on-rails ruby join rails-activerecord

考虑以下我的域模型的简化表示。

class Item < ApplicationRecord
  has_many :tags
end

class Tag < ApplicationRecord
  belongs_to :item
  enum :value, %i{hot cold}

  validates :value, uniqueness: { scope: :item_id }
end

每个项目都有零个或多个标签,这些标签指示可能与我的程序相关的项目属性。在此示例中,“hot”和“cold”是唯一有效的标签。

如果我想找到所有标记为“热门”的项目,我可以写

Item.joins(:tags).where('tags.value = 0')

当然,我更喜欢写“hot”这个词,而不是枚举的整数值。我可以用命名参数来强制 ActiveRecord 的手。

Item.joins(:tags).where('tags.value': 'hot')

但是使用一个名称不是有效 Ruby 标识符的命名参数感觉有点……错误。有没有一种更简洁的方法来进行此查询,而不涉及如此奇怪的伪变量?

最佳答案

这感觉更好吗:

Item.joins(:tags).where(tags: {value: :hot})

class Item < ApplicationRecord
  has_many :tags

  scope :tagged, ->(value) { joins(:tags).where(tags: {value:}) }
end

Item.tagged(:hot)

关于ruby-on-rails - 引用连接 Rails 表中枚举的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76886845/

相关文章:

ruby-on-rails - 在 rails 中,asp.net 的 App_Code 文件夹相当于什么?

ruby-on-rails - 使用 RSpec 改进的测试类

PHP 从具有 3 个连接的 2 个表中输出数据

ruby-on-rails - 在Rails查询中包含LIKE子句的最佳方法是什么?

ruby-on-rails - 只允许登录/当前用户编辑自己的帖子

jquery - Rails3 应用程序使用 jquery 但未将其包含在 Gemfile 中,应该吗?

ruby-on-rails - 如何测试序列化列?

ruby-on-rails - 检查帖子是否在特定日期后发布

c# - 使用分隔符连接字符串并考虑空字符串

python - 如果列表中的元素位于两个空格之间,则连接这些元素