Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于activerecord元数据的查询_Ruby On Rails_Activerecord_Store - Fatal编程技术网

Ruby on rails 基于activerecord元数据的查询

Ruby on rails 基于activerecord元数据的查询,ruby-on-rails,activerecord,store,Ruby On Rails,Activerecord,Store,因此,我在rails数据库中有一个用户对象,其中包含一个元数据列。我希望能够做的是基于本专栏的查询 所以我有一个User,它有User.name和User.metadata。我设置了商店,以便: store_accessor :metadata, [:hair_color, :eye_color] 如果我做了User.first.hair\u color我得到了blue就像我期望的那样。。。似乎不起作用的是User.where(头发颜色:'blue')。如何基于元数据进行查询?您必须这样搜索

因此,我在rails数据库中有一个用户对象,其中包含一个元数据列。我希望能够做的是基于本专栏的查询

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

store_accessor :metadata, [:hair_color, :eye_color]

如果我做了
User.first.hair\u color
我得到了
blue
就像我期望的那样。。。似乎不起作用的是
User.where(头发颜色:'blue')
。如何基于元数据进行查询?

您必须这样搜索

User.where("metadata like ?", "%#{matadata_key}: #{metadata_value}%")
例如,
元数据\u键
将是
“头发颜色”
元数据\u值
将是
“蓝色”


这将是一个非常缓慢的搜索。通读了解更多详细信息

如果您想存储任意复杂的信息(如元数据),我建议使用JSON列类型,该类型在和中提供。以下是有关官方文档的一些信息。

如果可能,我会避免使用store_访问器来搜索要搜索的字段。如果只有少量全局使用的属性,则可以通过使它们成为数据库中的实际列来实现。或者使用一个gem,比如if,字段会因用户而异。我忘了提到这个列已经是JSON了,所以这正是我需要的!谢谢