【问题标题】:Retrieving all items through 2 different associations通过 2 个不同的关联检索所有项目
【发布时间】:2011-11-18 06:40:34
【问题描述】:

我们说

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

还有

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

加入“projects”和“joined_projects”以获得所有项目的最佳方法是什么?用户希望无需使用 sql 即可访问。

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

【问题讨论】:

    标签: ruby-on-rails activerecord model


    【解决方案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
    

    这可能会影响正常化神经,但应该可以完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2015-04-16
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多