2013-05-13 39 views
0

我想知道如何檢查數組元素是否存在於MongoMapper數組中。 This question是我能找到的最接近的,但它解決了查詢問題,而不是簡單地使用您已有的文檔。你怎麼稱呼「包含?」在Rails 3中的MongoMapper數組?

我的用戶模型包含線

key :roles, Array 

的「角色」數組包含字符串,如「管理」或「用戶」。對於授權,我需要調用類似下面的方法對用戶的一個實例:

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

但是,當我嘗試調用「包含?」紅寶石抱怨說,有沒有這樣的方法:「包含」

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

如果沒有辦法做到這一點,那麼我該如何轉換數組一個Ruby數組打電話?調用to_a不這樣做:

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

我使用Rails 3.2.13和Ruby-1.9.3-P392,並在山獅MongoMapper 0.12.0。

+0

我不熟悉的MongoDB所以這個建議是noobish。 'user.roles'返回的結果是什麼? – jason328 2013-05-13 01:04:22

+0

答案是...... Ruby數組沒有'contains?'方法。它被稱爲'include?'。唉...... – 2013-05-13 01:06:30

+0

@ jason328它正在返回'#'。無論如何,我的愚蠢的錯誤不知道正確的方法名稱。 – 2013-05-13 01:07:41

回答

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'}]) 
+0

@ muistooshort - 是的,我打錯了 – 2016-02-03 15:02:10

相關問題