0

我想知道如何检查 MongoMapper 数组中是否存在数组元素。这个问题是我能找到的最接近的问题,但它解决了查询,而不是简单地使用您已有的文档。

我的用户模型包含该行

key :roles, Array

“角色”数组包含诸如“管理员”或“用户”之类的字符串。对于授权,我需要在用户实例上调用类似以下方法:

if user.roles.contains?('admin')
    # Do administrative stuff.
end

但是当我尝试调用“包含?” Ruby 抱怨说没有这样的方法:

NoMethodError (undefined method `contains?' for #<Array:0x007fc845cd8948>):
    app/models/ability.rb:11:in `initialize'
    app/controllers/settings_controller.rb:5:in `index'

如果没有办法做到这一点,那么如何将 Array 转换为 Ruby 数组以调用“包含?”?调用 to_a 并没有这样做:

if user.roles.to_a.contains?('admin')  # etc...

我在 Mountain Lion 上使用 Rails 3.2.13、Ruby-1.9.3-p392 和 MongoMapper 0.12.0。

4

1 回答 1

2

您要查找的函数是include?,因此表达式为:user.roles.include?('admin')

但是,由于您提到了 mongomapper,如果您在角色数组上执行查询,您将执行以下操作:

User.where( :roles => 'admin' )

您还可以使用数组搜索数组

User.where( :roles.in => ['admin'] )

对于管理员或用户的查询,您可以执行以下操作:

User.where( :$or => [{:roles => 'admin'},{:roles => 'user'}] )

你可以做同样的事情:

User.where( :$and => [{:roles => 'admin'},{:roles => 'user'}] )
于 2016-01-29T21:22:03.067 回答