如何从Rails中的serialize Hash列进行查询

时间:2018-02-27 12:39:19

标签: ruby-on-rails ruby

例如:

class User < ActiveRecord::Base
 serialize :preferences, Hash
end

偏好设置包含哈希记录... 例如:

{'category' => 'a', 'type' => 'b', 'published' => true}

如何进行一些查询,我必须返回与序列化列中特定键值匹配/等于的记录。

我希望有类似的东西:

.where('preferences.published' => true)

提前致谢。

2 个答案:

答案 0 :(得分:1)

您不能使用本机数据库例程来查询序列化字段。 执行此查询的唯一方法是执行

User.all.select { |u| u.preferences['published'] == true }

您只想在不想查询字段时序列化字段,只是将数据“暴露”为“ 如果你需要对它进行全局查询,你应该有一个UserPreference表,例如user_id和不同的首选项。

你可以'破解'它正在做什么@mudasobwa说.where('preferences LIKE "%published: true%"'),但它可能有风险。

答案 1 :(得分:0)

默认情况下,Rails将哈希序列化为YAML,因此您可以执行以下操作:

.where('preferences LIKE "%published: true%"')