簡體   English   中英

Rails 3使用選擇不同

[英]Rails 3 using select distinct

我有3張桌子需要加入。

我有EventsPlacesBoroughs

地方屬於自治市鎮,有很多活動

我想從給定日期的事件列表中檢索所有不同自治市鎮的列表。

Event.where(day_of_week: 2).joins(:place,:borough).select("DISTINCT(boroughs.name) AS name")

生成SQL:

SELECT DISTINCT(boroughs.name) AS name FROM "events" INNER JOIN "places" ON "places"."id" =        
"events"."place_id" INNER JOIN "places" "places_events_join" ON "places_events_join"."id" = 
"events"."place_id" INNER JOIN "boroughs" ON "boroughs"."id" = 
"places_events_join"."borough_id" WHERE "events"."active" = 't' AND "events"."day_of_week" = 3

當我將其放入postgres DB控制台時,它看起來很完美並且可以正常工作,但是對於我的rails控制台,我卻可以使用。

#<Event >, #<Event >, #<Event >, #<Event >, #<Event >, #<Event >, #<Event >, #<Event >, #<Event >, #<Event >

更新:

Walrus先生的建議非常有效,但是我仍然感到困惑,為什么當SQL本身產生相同的結果時,反之亦然。

Borough.joins(:events).where(:events => {:day_of_week => 2}).select("DISTINCT(boroughs.name) AS name")

產生:

[#<Borough name: "richmond">, #<Borough name: "southwark">, #<Borough name: "brent">, #<Borough name: "city of london">] 

但是這個

Event.where(:events => {:day_of_week => 2}).joins(:borough).select("DISTINCT(boroughs.name) AS name")

產生:

[#<Event >, #<Event >, #<Event >, #<Event >, #<Event >] 

您需要命名您的列,否則ActiveRecord將不知道如何映射它。

Event.where(day_of_week: 2).joins(:place,:borough).select('DISTINCT(boroughs.name) as "bouroughs.name"')

我想我會這樣:

Borough.joins(:events).where(:events => {:day_of_week => 2})

Rails默認會使用內部聯接,因此它將排除沒有匹配事件的所有自治市鎮。 您實際上根本不需要如上所述的放置數據。

從Rails 3.2開始,請嘗試Pluck

Event.where(:events => {:day_of_week => 2}).joins(:borough).uniq.pluck('boroughs.name')

應該管用。

如果您打算將其鏈接到預先警告的范圍,那么延遲加載將導致它無法按預期工作,而是執行類似的操作

def self.somemethod
  joins(:borough).pluck('boroughs.name').uniq
end

首先,給列名起別名,

select("DISTINCT boroughs.name as borough_name")

然后,將該名稱作為字段訪問。

events = Event.where(day_of_week: 2).joins(:place,:borough).select("DISTINCT boroughs.name as borough_name")
events.map{|event| event.borough_name}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM