【发布时间】:2016-01-14 17:54:19
【问题描述】:
我有一个 Rails 应用程序,其中包含美国的一个城市。我正在开发一个数据库流程,该流程将以付费进入网站的企业为特色。其目标是在距城市位置一小时车程的范围内展示企业,以使游客了解可用的东西。我的目标是按城市对企业进行分组,首先列出该城市的企业,然后显示下一个最近城市的企业。我希望城市按距离列出,城市组内的企业按企业名称列出。
我有两个表要加入以完成此操作。
city (has_many :businesses) - name, distance
business (belongs_to :city) - name, city_id, other columns
我知道我可以执行类似于下面的语句的操作,它应该只显示城市行存在业务行的数据。
@businesses = City.order(“distance ASC").joins('JOIN businesses ON businesses.city_id = cities.id')
我想按businesss.name 添加订单。我看过一个示例 ORDER BY a.Date, p.title,它引用了来自两个数据库的列。
ORDER BY a.Date, p.title
我可以在现有语句中添加代码以按名称对企业进行排序,还是必须嵌入 SQL 代码才能执行此操作?我已经看到其他数据库这样做的示例,但答案不是 Rails 特定的,或者没有使用 PostgreSQL。
【问题讨论】:
-
具有多个排序列的 ORDER BY 不是 Postgres 特定的。
City.order(“distance ASC, businesses.name").joins(:businesses)应该可以工作。您似乎没有尝试过它是否有效?!请在此处询问之前尝试一下。 -
@Raffael 过去几年我在这个论坛上提交了 89 个问题。我尽我所能尝试事情并按照指导方针进行研究。如果我想出一些可以尝试的东西,我会在发布我的问题之前尝试一下。这是我在数小时的在线研究后无法考虑尝试的一次。顺便说一句,您的解决方案没有找到任何记录。我将继续使用我的代码并希望找到解决方案。
-
我忘记在我的模型中包含正确的关系并且数据存在于我的表中。当我显示业务行时,屏幕上会显示正确的城市名称。
-
抱歉这么无情。估计我累了。很高兴您找到了适合您的解决方案!让我给你两个可能对未来有帮助的建议:
to_sql和merge关系方法。 -
@Raffael 可能会在您疲倦或饥饿时发生。接受道歉。由于您发布的内容我不知道,因此我正在保存此问题的链接。您建议的 .joins 子句(我从未使用过)在我只需要使用 .pluck 访问几列的其他情况下很有用。感谢其他建议。
标签: ruby-on-rails postgresql join