Rails has_many和多个项目

时间:2014-01-26 20:35:43

标签: ruby-on-rails ruby activerecord

我有很多使用has_many_through关系的模型:usersrolessecurity_items

用户可以处于多个角色,角色可以拥有许多安全项。因此,如果用户处于多个角色,我如何确定特定项目是否为任何角色?如果它在一个中是真的而在另一个中是假的,那么真的应该优先。

如果用户只有一个角色,则以下方法有效,但如果用户是多个角色,则rails console

中的以下内容失败
role = RoleMembership.where("user_id = ?", user.id)
role.security_items.exists?(1)

如果用户处于多个角色时出错:

NoMethodError: undefined method `security_items' for #<ActiveRecord::Relation::ActiveRecord_Relation_RoleMembership:0x00000102da5e28>`

如何查看每个角色以查看该表中是否存在该项?

2 个答案:

答案 0 :(得分:0)

尝试role.map(&:security_items).flatten.uniq获取所有安全项目。

答案 1 :(得分:0)

RoleMembership.where("user_id = ?", user.id).select { |role| role.security_items.present? }

使用您提供的代码,这就是我将如何做到的。

编辑:

如果您收到NOMETHOD错误,则表示该角色没有名为security_items的方法。你的关系是否在模特中正确设置?您可以在控制台中尝试

RoleMembership.find(1).security_items

如果出现错误,那么您已经确定了问题。