通过2个不同的关联检索所有项目

时间:2011-11-18 06:40:34

标签: ruby-on-rails activerecord model

让我们说

  • 用户有很多项目(用户创建的项目)
  • 用户拥有多个会员资格

另外

  • 用户通过会员资格(其他用户创建的项目)有许多joined_project

加入'projects'和'joined_projects'以获得用户有权访问的所有项目的最佳方式是什么,而不使用sql。

其他选项是为所有项目创建成员资格,即使用户拥有项目,但会在数据库上生成重复数据。

1 个答案:

答案 0 :(得分:1)

join中的ActiveRelation方法始终使用内部联接,因此从SQL角度来看,无法“正确”执行此操作。但是,您始终可以设置counter_cache并按如下方式进行查询:

class User < ActiveRecord::Base
  has_many :projects, :counter_cache => true
  has_many :joined_projects, :through => :memberships, :counter_cache => true

  class << self
    def has_projects
      where('projects_count > 0 OR joined_projects_count > 0')
    end
  end

  def all_projects
    projects + joined_projects
  end
end

它可能会达到正常化的神经,但应该完成工作。