【问题标题】: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
这可能会影响正常化神经,但应该可以完成工作。