。包括?在我期望的时候返回false

时间:2015-08-01 19:55:33

标签: ruby-on-rails ruby ruby-on-rails-4

在我的种子文件中,我有一行:

@organization.relationships.include?(@user)

虽然此行应为true,但它为false。有没有人理解为什么,给出debugger的以下输出?

(byebug) @organization.relationships
#<ActiveRecord::Associations::CollectionProxy [#<Relationship id: 2, user_id: 2, organization_id: 2, member: true, ..., updated_at: "2015-08-01 19:44:54">]>
(byebug) @user.id
2
(byebug) @organization.relationships.include?(@user)
false

在调试器中@organization.relationship证明userid=2包含在组织的关系中。

3 个答案:

答案 0 :(得分:2)

@organization.relationships不包含users个实例,它包含relationuser之间的organization个实例(我假设您使用HABTM)。您可以使用whererelationships中找到用户ID。

=> @organization.relationships.where(user_id: @user.id).any?
#> true 
#> short version should work too.
=> @organization.relationships.where(user: @user).any?

您可以在此使用where,因为它是<ActiveRecord::Associations::CollectionProxy。参考any?

答案 1 :(得分:1)

您需要将@userUser个对象进行比较而不是Relationship个对象

@organization.relationships.map(&:user).include?(@user)

答案 2 :(得分:1)

以下这一行将为您返回特定组织的关系。

@organization.relationships

现在你正在做的是试图查看用户是否存在于关系的活动记录关系列表中,而这些关系列表总是会出错。

如果您希望查看与组织关联的关系的用户。你应该这样做。

@organization.relationships.collect(&:user).compact.include?(@user)

这样您将要为组织获取关系,然后为关系关联用户。并匹配用户。