我正在使用cancan gem,而在ability.rb中,我想檢查具有特定角色的用戶是否可以更新另一個對象,當且僅當用戶'是另一個對象的一部分時是,模型之間有關聯,用戶可以在對象的users
方法中找到)。Ruby數組包括?方法奇怪的行爲
我想使用include?
方法來查看在所得到的User
陣列中是否找到@current_user
。
當通過ability.rb測試代碼時,它總是返回false
。如果我在rails控制檯中運行相同的代碼,它工作正常。
我發現include?
不起作用,如果Array
對象不是傳遞對象相同的類,但我通過class.name
打印他們的類,他們是相同的。
我最終使用detect
並比較了id,但我想知道是否有人曾經遇到過這類問題,以及是否可以對此進行說明。
與delete_if
發生了類似的情況,在從100中刪除20之後,count仍然返回100,但每個循環僅打印應該在那裏的那些(20)。在RoR環境中執行時會發生這種情況,但具有相同代碼的Rails控制檯的行爲與預期相同(array.count # => 20
)。
編輯20131007
的代碼關於include?
問題有點。 即使用戶在從course.institution.users
產生的數組中,該位始終返回false。
can [:read, :update], Course do |course|
val = course.institution.users.include? user
end
如果我採取同樣的路線,並嘗試在軌道控制檯給定的過程和用戶,像這樣:
Course.find(course_id).institution.users.include? User.find(user_id)
它可以作爲它應該,返回true
那麼用戶在數組中找到並且如果不是,則返回false
。
因此,即使,即使如果的==
經營者以某種方式怪異這個特定的模式,我處理在兩種情況下相同的陣列,所以它要麼破產或兩種箱子做工精良,不僅在康康ability.rb
......對吧?
你可以添加一個代碼片段或repro情況? – Davidann
很難說沒有代碼的例子,但會打賭你比較蘋果與橙子。只需檢查對象的相等運算符'=='以確保'Array#include?'和其他方法的預期行爲。 –