考虑我的域模型的以下简化表示.
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
每个项目都有零个或多个标签,这些标签指示可能与我的程序相关的项目的属性.在本例中,"热"和"冷"是唯一有效的标记.
如果我想找到所有被标记为"热门"的物品,我可以写
Item.joins(:tags).where('tags.value = 0')
自然,我更喜欢写单词"hot",而不是枚举的整数值.我可以通过命名参数强制ActiveRecord使用.
Item.joins(:tags).where('tags.value': 'hot')
但是,拥有一个名称不是有效Ruby标识符的命名参数感觉有点...不对.有没有一种更好的方法来进行这个查询,而不涉及这样一个奇怪的伪变量?