3

我有一个 Rails 模型,其属性是一组数据值(字符串)。我想做一个 ActiveRecord 查找,它返回数组包含特定值的任何记录。有没有办法用 ActiveRecord 做到这一点,使它比迭代更高效?

4

1 回答 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 回答