在rails模型中查询数组属性的位置

时间:2016-03-16 17:34:00

标签: ruby ruby-on-rails-4

我有一个包含角色数组的用户模型。

u=User.first
u.roles = ['admin']
v=User.last
u.roles = ['admin', 'member']

如何查询以获取具有管理员角色的所有用户?

编辑: roles是用户模型的序列化数组

User型号:

serialize :roles

迁移:

add_column :users, :roles, :string, default: []

1 个答案:

答案 0 :(得分:1)

取决于"角色"的意思是:

如果是

中的关联
class User < ActiveRecord::Base
  has_many :roles
end

然后你查找角色并获取所有用户:

Role.find_by_name("admin").users

或者角色只是一个列并且是序列化的,在这种情况下,您可以实例化所有用户(慢)

User.all.select { |u| u.roles.include? "admin" }

或直接查询数据库,这更复杂,取决于适配器。

我的观点:当关系可以做时,我会避免使用序列化列。它们在各方面都很麻烦:形式,搜索,选择......