2014-02-20 72 views
0

「鄰居」屬於「城市」。 「城市」有很多「街區」。通過有額外條件的連接獲取所有記錄

我如何可以選擇所有社區城市的名字屬於特定城市?城市名稱是存儲在城市表格中的屬性。

Neighborhood.joins(:city)會讓我所有的社區,使用該SQL:

SELECT "neighborhoods".* 
FROM "neighborhoods" 
INNER JOIN "cities" 
ON "cities"."id" = "neighborhoods"."city_id" 

但什麼是Rails的方式與這個SQL執行一個查詢(唯一的區別是最後一行)?

SELECT "neighborhoods".* 
FROM "neighborhoods" 
INNER JOIN "cities" 
ON "cities"."id" = "neighborhoods"."city_id" 
AND "cities"."name" = "New York" 

回答

1

的「軌道」這樣做的方式是使用活動記錄關聯,以便在您的模型

class City < ActiveRecord::Base 
    has_many :neighborhoods 
    .... 
end 

class Neighborhood < ActiveRecord::Base 
    belongs_to :city 
    ... 
end 

然後,您可以撥打:

neighborhoods = City.find_by(name: "New York").neighborhoods 
+0

作爲英國人,我不得不剋制自己做的鄰居/鄰里/ – Yule

1

只需申請使用cities.name WHERE條件:

Neighborhood.joins(:city).where("cities.name = ?", "New York") 
0

如果您使用Rails的模型,不完全是SQL,但是同樣的結果可能是:

城市= City.where(:名稱=>「紐約」)。第一 city.neighborhoods

0

你應該試試這個代碼 -

City.joins(:neighborhoods).select("neighborhoods.*").where("cities.name = 'New York'") 

Explaination-

It will be 'City.joins(:neighbourhoods)' because City has_many neightbours and 'city_id' will work as foreign key for neighbourhood model. 

選擇會( 「鄰里*。」)從鄰居表中選擇所有列。

其中(「cities.name ='紐約'」)是您的所有記錄具有「城市名稱」等於「紐約」的編碼。