我可以使用不同表中的两列来订购结果吗?

时间:2016-01-14 17:54:19

标签: ruby-on-rails postgresql join

我有一个Rails应用程序,在美国有一个城市。我正在开发一个数据库流程,该流程将展示付费在网站上的企业。我们的目标是在距离城市一小时车程的地方展示企业,以便让访客了解可用的内容。我的目标是按城市分组业务,首先列出城市中的业务,然后显示下一个最近城市的业务。我希望按距离列出城市,城市群内的企业按商家名称列出。

我想加入两个表来完成此任务。

NSCoding

我知道我可以做类似下面的声明,它应该只显示城市行存在业务行的数据。

city (has_many :businesses) - name, distance

business (belongs_to :city) - name, city_id, other columns

我想通过businesses.name添加订单。我见过一个示例@businesses = City.order(“distance ASC").joins('JOIN businesses ON businesses.city_id = cities.id') ,它引用了两个数据库中的列。

ORDER BY a.Date, p.title

我可以在现有语句中添加代码以按名称订购商家,还是必须嵌入SQL代码才能执行此操作?我已经看到其他数据库执行此操作的示例,但答案不是Rails特定或不使用PostgreSQL。

1 个答案:

答案 0 :(得分:0)

经过更多的研究后,我终于能够按照我想要的方式工作了。

使用.joins(:businesses)没有产生任何结果,因为它只包含City aka BusinessCity的列,而没有Business列的列。我发现您必须使用.pluck.select来访问您要加入的表中的列。这是我不想做的事情,因为我预计将来会添加更多列。

我最初将Business作为主要表而不是BusinessCity作为我的起点,因为我在我的观点中列出了Business的数据,如我在初始问题中所述。当我这样做时,我无法使用.joins(:business_cities)子句,因为它表示关系不存在。我决定回到我最初使用Business作为主表的开始。

我想出了以下语句,该语句提供了BusinessCity表上按距离排序的两个表中的所有列以及Business表上的名称。我根据需要添加了.where子句,以便在我的视图中提供搜索功能。

@businesses = Business.joins("JOIN business_cities ON business_cities.id = businesses.business_city_id").order("business_cities.distance, businesses.name")