2016-01-14 90 views
0

我有一個以美​​國城市爲特色的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') 

我想通過business.name添加訂單。我見過一個例子ORDER BY a.Date, p.title,它引用了來自兩個數據庫的列。

ORDER BY a.Date, p.title 

我可以將代碼添加到現有的聲明名稱訂購業務或我將不得不嵌入SQL代碼來做到這一點?我已經看到了其他數據庫的例子,但是答案不是Rails特定的,或者不使用PostgreSQL。

+0

具有多個排序列的ORDER BY不是Postgres特定的。 'City.order(「distance ASC,business.name」)。joins(:business)'應該可以工作,你似乎沒有嘗試過它是否有效?!請在這裏詢問之前試試。 – Raffael

+0

@Raffael我已經提交在過去幾年中,這個論壇有89個問題,我盡我所能去嘗試一些事情,並按照指導原則進行研究,如果我想出點什麼來嘗試,我會在發佈我的問題之前進行嘗試。沒有足夠的時間在線研究中考慮某些事情,但是你的解決方案沒有找到任何記錄,我會繼續使用我的代碼,並希望找到解決方案 –

+0

我忘了在模型中包含關係是正確的數據存在於我的表格中當我顯示一個商務行時,正確的城市名稱出現在屏幕上 –

回答

0

經過大量的研究後,我終於能夠按照自己的想法開展工作。

使用.joins(:businesses)未產生任何結果,因爲它只包含城市又名BusinessCity的列,並且沒有Business列。我發現您必須使用.pluck.select才能訪問您要加入的表中的列。這是我不想做的事情,因爲我預見未來會增加更多列。

我最終將Business作爲主表而不是BusinessCity作爲我的出發點,因爲我在我的視圖中列出了來自Business的數據,如我最初的問題所述。當我這樣做時,我不能使用.joins(:business_cities)子句,因爲它表示關係不存在。我決定回到我最初使用「商業」作爲主表的開始。

我想出了以下語句,該語句提供BusinessCity表上的按距離排序的所有列以及Business表上的名稱。根據需要,我成功添加了.where子句,以適應我的視圖中的搜索功能。

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