rya*_*an0 3 sql activerecord ruby-on-rails-3
我有一个Rails模型,其属性是一个数据值数组(字符串).我想做一个ActiveRecord find,它返回任何数组包含特定值的记录.有没有办法用ActiveRecord做到这一点,这会使它比迭代更高效?
由于Rails默认使用YAML序列化数组,因此很难进行"包含值"查询.
如果您的值是唯一的并且是固定集的一部分(例如,有一roles列['User', 'Admin', 'Guest']),您可以执行以下操作:
User.where("roles ilike '%\n- Guest\n%'")
Run Code Online (Sandbox Code Playgroud)
因为那将匹配YAML ---\n- User\n- Admin\n Guest\n.
或者,您可以在Postgres中使用本机数组类型.在Rails 3中,你需要使用activerecord-postgres-array gem(虽然我不知道这是多么好维护); 在Rails 4中,它本机支持.
您可以这样设置列:
t.string :roles_array, :array => true, :length => 30
Run Code Online (Sandbox Code Playgroud)
然后你可以查询它:
User.where("'Guest' = ANY(roles_array)")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2264 次 |
| 最近记录: |