在我的种子文件中,我有一行:
@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
证明user
与id=2
包含在组织的关系中。
答案 0 :(得分:2)
@organization.relationships
不包含users
个实例,它包含relation
和user
之间的organization
个实例(我假设您使用HABTM
)。您可以使用where
在relationships
中找到用户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)
您需要将@user
与User
个对象进行比较而不是Relationship
个对象
@organization.relationships.map(&:user).include?(@user)
答案 2 :(得分:1)
以下这一行将为您返回特定组织的关系。
@organization.relationships
现在你正在做的是试图查看用户是否存在于关系的活动记录关系列表中,而这些关系列表总是会出错。
如果您希望查看与组织关联的关系的用户。你应该这样做。
@organization.relationships.collect(&:user).compact.include?(@user)
这样您将要为组织获取关系,然后为关系关联用户。并匹配用户。