基于活动记录元数据的查询

Query base on activerecord metadata

所以我的 rails 数据库中有一个带有元数据列的用户对象。我希望能够做的是基于此列的查询...

所以我有一个 User,它有 User.nameUser.metadata。我设置了商店,所以我有:

store_accessor :metadata, [:hair_color, :eye_color]

如果我这样做 User.first.hair_color,我会得到 blue,就像我期望的那样......似乎不起作用的是 User.where(hair_color: 'blue')。如何根据元数据进行查询?

你必须像这样搜索

User.where("metadata like ?", "%#{matadata_key}: #{metadata_value}%")

对于您的示例,metadata_key 将是 "hair_color",而 metadata_value 将是 "blue"

这将是一个非常缓慢的搜索。通读 this blog 了解更多详情

如果你想存储任意复杂的信息(比如元数据似乎是),我建议使用 JSON 列类型,它在官方文档 MySQL and Postgre. Here is some info about saving and querying JSON data in Rails 中可用。