我有很多使用has_many_through
关系的模型:users
,roles
和security_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>`
如何查看每个角色以查看该表中是否存在该项?
答案 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
如果出现错误,那么您已经确定了问题。