2011-11-18 54 views
1
检索所有项目

比方说通过2周不同的联想

  • 用户有很多项目(项目由用户创建的)
  • 用户有很多成员

而且

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

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

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

回答

1

ActiveRelation中的join方法总是使用内部连接,所以从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 

这可能创下正常化神经而应该把工作做好。