我有一个名为lists的模型,它有一个名为item_ids
的列。item_ids
是一个JSON列(MySQL(,该列包含UUID数组,每个UUID引用一个项目。
现在,当有人创建新列表时,我需要搜索是否存在具有相同 UUID 集的现有列表,并且我想使用查询本身进行此搜索以获得更快的响应。还要尽可能多地使用活动记录查询。
我如何实现这一点?
item_ids = ["11E85378-CFE8-39F8-89DC-7086913CFD4B", "11E85354-304C-0664-9E81-0A281BE2CA42"]
v = List.new(item_ids: item_ids)
v.save!
现在,如何检查是否存在与查询中提到的项目 ID 完全匹配的列表?跟随是行不通的。
list_count = List.where(item_ids: item_ids).count
编辑 1
List.where("JSON_CONTAINS(item_ids, ?) ", item_ids.to_json).count
此语句有效,但即使只有一个项目匹配,它也计数。查找确切的项目数。
编辑 2
List.where("JSON_CONTAINS( item_ids, ?) and JSON_LENGTH(item_ids) = ?", item_ids.to_json, item_ids.size).count
看起来这正在工作
您可以在列表和项目之间实现许多关系,然后像这样访问。
List.include(:item(.where('items.id in (?(',item_ids(
要实现has_many关系,请执行以下操作:
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association