将来自不同表的多个关系连接成一个关联

时间:2015-04-24 21:59:10

标签: ruby-on-rails activerecord

我有几个与这个问题相关的模型。

  • UserGroupPermission
  • 用户组
  • 用户
  • UserPermission
  • 权限

基本上,可以通过UserGroup或直接为用户分配权限。 UserGroups通过UserGroupPermission模型绑定到特定权限。用户通过UserPermission模型绑定到特定权限。

最终结果是能够调用User.permissions并直接或通过UserGroup返回分配给该用户的每个权限。

这是我目前的模特

class User < ActiveRecord::Base
    belongs_to :user_group

    #Permissions
    has_many :user_permissions
    has_many :user_group_permissions, :through => :user_group
    has_many :permissions, :through => :user_group_permissions #and :user_permissions
end

我已经搜索了高低的解决方案,但似乎找不到我的确切案例。提前谢谢!

编辑:我被告知不清楚我在问什么。希望这会有所帮助:基本上用户has_many:permissions,:through =&gt; :user_group_permissions和:user_permissions,但您不能使用和将结果连接在一起。我正在尝试检索并将这两种关系的结果合并为一个。

编辑2:我一直在做一些工作。这段代码给出了理想的结果,但我不确定它对于潜在的大型数据库有多好。

  #Permissions
  has_many :user_permissions
  has_many :user_group_permissions, :through => :user_group
  #has_many :permissions, :through => :user_group_permissions
  #has_many :permissions, :through => :user_permissions

  def permissions
    all_permissions = []
    UserGroupPermission.where('user_group_id = ?', user_group_id).each do |ugp|
      all_permissions.append(Permission.find(ugp.permission_id))
    end

    UserPermission.where('user_id = ?', id).each do |p|
      all_permissions.append(Permission.find(p.permission_id))
    end

    return all_permissions
  end

0 个答案:

没有答案