Ruby on rails Ruby数组包括哪些?方法奇怪的行为

Ruby on rails Ruby数组包括哪些?方法奇怪的行为,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,我正在使用cancan gem,在ability.rb中,我想检查具有特定角色的用户是否可以更新另一个对象,当且仅当该用户“是”另一个对象的一部分时(即,模型之间存在关联,并且该用户可以在该对象的users方法中找到) 我想使用include?方法查看在生成的user数组中是否找到@current\u user 当通过ability.rb测试代码时,它总是返回false。如果我在rails控制台中运行相同的代码,它可以正常工作 我发现如果数组对象与传递的对象不属于同一类,则包含?不起作用,但我通

我正在使用cancan gem,在ability.rb中,我想检查具有特定角色的用户是否可以更新另一个对象,当且仅当该用户“是”另一个对象的一部分时(即,模型之间存在关联,并且该用户可以在该对象的
users
方法中找到)

我想使用
include?
方法查看在生成的
user
数组中是否找到
@current\u user

当通过ability.rb测试代码时,它总是返回
false
。如果我在rails控制台中运行相同的代码,它可以正常工作

我发现如果
数组
对象与传递的对象不属于同一类,则
包含?
不起作用,但我通过
class.name
打印了它们的类,并且它们是相同的

我最终使用了
检测
并比较了id,但我想知道以前是否有人遇到过此类问题,以及您是否可以对此提供一些帮助

类似的情况也发生在
delete\u if
,在删除了100个中的20个之后,count仍然返回100,但是each循环只打印应该在那里的那些(20)。这是在RoR环境中执行时发生的,但是rails控制台使用与预期相同的代码(
array.count\#=>20

编辑20131007

关于
include?
问题的一些代码。 此位始终返回false,即使用户位于
课程.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


因此,即使对于这个特定的模型,
=
操作符在某种程度上很奇怪,我在这两种情况下处理的数组都是相同的,所以它在这两种情况下都应该失效或工作良好,而不仅仅是在cancan
功能中。rb
。。。对吗?

Cancan有一个内置的机制来查询关联。在不知道您的具体设置的情况下,这应该接近您在
能力
课程中设置的方式:

can :view, MyObject, users: { id: user.id }

你能添加一个代码片段或一个复制案例吗?没有代码示例很难说,但我敢打赌你是在比较苹果和桔子。只需检查对象的相等运算符
=
,以确保
数组#include?
和其他方法的预期行为。