我正在使用 cancan gem,并且在ability.rb 中,我想检查具有特定角色的用户是否可以更新另一个对象,当且仅当用户“是”另一个对象的一部分时(也就是说,有一个模型之间的关联,用户在对象的users
方法中找到)。
我想使用该include?
方法查看是否@current_user
在结果User
数组中找到。
false
通过ability.rb 测试代码时它总是返回。如果我在 rails 控制台中运行相同的代码,它工作正常。
我发现include?
如果Array
对象与传递的对象不属于同一类,则不起作用,但我通过 打印了它们的类class.name
,它们是相同的。
我最终使用detect
并比较了 id,但我想知道以前是否有人遇到过此类问题,以及您是否可以对此有所了解。
发生了类似的事情delete_if
,在从 100 中删除 20 之后,count 仍然返回 100,但是每个循环只打印应该存在的那些(20)。在 RoR 环境中执行时会发生这种情况,但是具有相同代码的 rails 控制台的行为与预期的一样 ( array.count # => 20
)。
编辑 20131007
关于这个include?
问题的一些代码。该位始终返回 false,即使用户在来自 的结果数组中也是如此course.institution.users
。
can [:read, :update], Course do |course|
val = course.institution.users.include? user
end
如果我采取同样的做法,并在 rails 控制台中为给定的课程和用户尝试它,如下所示:
Course.find(course_id).institution.users.include? User.find(user_id)
它按预期工作,返回true
然后在数组中找到用户,false
如果没有。
因此,即使该特定模型的==
操作符在某种程度上很奇怪,我在两种情况下都在处理相同的数组,所以它应该在两种情况下都失败或运行良好,而不仅仅是在康康语ability.rb
中......对?