Rails 4加入相关表 - 当某些记录没有关联时进行排序

时间:2014-02-18 02:26:17

标签: mysql ruby-on-rails activerecord ruby-on-rails-4

我使用以下内容:

Vehicle.joins(:supplier, :owner, :model).order("#{sort_column} #{sort_direction}")

允许我按照4个相关模型中任何一个的属性对结果进行排序。问题是当特定车辆没有关联时,例如供应商,则不返回任何结果。只有当所有车辆都具有所有3个关联时,才会显示任何结果。

是否有其他方法可以实现我需要的功能?

1 个答案:

答案 0 :(得分:2)

默认情况下,rails执行内连接。这就是为什么在没有关联时你没有看到记录的原因。

如果您愿意,可以通过明确提及来改变联接类型

Vehicle
.joins("LEFT JOIN suppliers on vehicles.supplier_id = suppliers.id")
.joins("LEFT JOIN owners on vehicles.owner_id = owners.id")
.joins("LEFT JOIN models on vehicles.model_id = models.id")
.order("#{sort_column} #{sort_direction}")

我根据关联名称猜出了你的table_names和foreign_key名称。如果它们不同,请更改