首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails上执行外部连接的Squeel

在Rails上执行外部连接的Squeel
EN

Stack Overflow用户
提问于 2012-01-17 11:20:45
回答 2查看 2.2K关注 0票数 3

我正在尝试找到一种方法来创建一个简单的外部连接,而不会有太多的麻烦。我知道我可以通过指定一个外部连接来手动完成此操作,但我正在寻找一种简单的方法。

因此,我看了一下Squeel,它似乎是Metawhere的新替代品。它似乎能够处理外连接,但我不能得到我想要的东西。

具体地说,我有三个模型:

代码语言:javascript
复制
City
Building
CityBuilding

我只想要一份所有建筑物的列表,无论它们是否存在于城市中。当然,CityBuilding是连接城市和建筑物的模型。我想要得到这样的东西:

代码语言:javascript
复制
city 1{
  TownCenter => city_building
  Sawmill => city_building
  Quarry => nil
} 

这个查询是空的,因为这个查询没有city_building条目,您就明白了。

有没有办法让Squeel做到这一点?或者是另一个gem,而不需要手动执行外部连接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-01 23:02:28

我认为你可以使用Squeel来尝试下面这样的东西。我不确定哪里的部分。您必须给出两个联接条件中的一个。

代码语言:javascript
复制
Building.joins{city}.joins(city_buildings.outer).where{(buidlings.id == city_buildings.building_id) & (cities.id == city_buildings.city_id)}

代码语言:javascript
复制
Building.joins{city}.joins(city_buildings.outer).where{buidlings.id == city_buildings.building_id}

代码语言:javascript
复制
Building.joins{city}.joins(city_buildings.outer).where{cities.id == city_buildings.city_id}
票数 5
EN

Stack Overflow用户

发布于 2012-01-28 12:48:54

AR关联includes使用LEFT OUTER JOIN。如果您具有如下模型关系,则:

代码语言:javascript
复制
class City
  has_many :city_buildings
  has_many :buildings, :through => :city_buildings
end

class Building
  has_one :city_building
  has_one :city, :through => :city_building
end

class CityBuilding
  belongs_to :city
  belongs_to :building
end

获取建筑物列表而不考虑城市链接的步骤

代码语言:javascript
复制
Building.includes(:city).where(...)

获取带有城市链接的建筑物列表的步骤

代码语言:javascript
复制
Building.includes(:city).where("cities.id IS NOT NULL")

便笺

我假设您想要在查询之后访问城市对象(如果存在)。

如果您不想急于加载与建筑物相关联的城市对象(因为AR急切加载包括在执行外部联接之后的关联),则这不是一个好的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8889280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档