我有一个 Rails 模型,其属性是一组数据值(字符串)。我想做一个 ActiveRecord 查找,它返回数组包含特定值的任何记录。有没有办法用 ActiveRecord 做到这一点,使它比迭代更高效?
问问题
3635 次
1 回答
10
由于 Rails 默认使用 YAML 序列化数组,因此很难执行“包含值”查询。
如果您的值是唯一的并且是固定集合的一部分(例如带有 的roles
列['User', 'Admin', 'Guest']
),您可以执行以下操作:
User.where("roles ilike '%\n- Guest\n%'")
因为这将匹配---\n- User\n- Admin\n Guest\n
.
或者,您可以在 Postgres 中使用本机数组类型。在 Rails 3 中,您需要使用activerecord-postgres-array gem(虽然我不知道它的维护情况如何);在 Rails 4 中,它是原生支持的。
您将这样设置您的列:
t.string :roles_array, :array => true, :length => 30
然后你可以查询它:
User.where("'Guest' = ANY(roles_array)")
于 2013-07-08T16:10:38.723 回答