2017-06-23 13 views
0

country,cityおよびprovinceというモデルがあります。Railsは結合テーブルから値を取得します

Country 
has_many: cities 

City 
has_many :provinces 
belongs_to :country 

Province 
belongs_to :city 

このモデルは私がparams[:name]を取得する際に、関連するレコードを検索するために参加してnamelat

longだから、私は1つのクエリで3つのモデルを検索したい同じ列があります。この可能性は、それはフランスが、それは国などでそれを見つけるの場合は例えば

..

ですか?

EDIT:

私が試しました。

Country.all.joins(city: :province).where("cities.name = ? or provinces.name = ?", params[:name]) 

しかし、これは国を返します。私は国が緯度と経度を持っているかどうかを見たいと思っています。もしその都市が都市の長らく緯度を上げていれば、その州は緯度と経度を取得しています。その都市 は都市の緯度長い取得し、それが地域であれば緯度と 州の長い得れば、私はそれが国である場合、検索したい

+0

複数の国、都市、または州が同じ名前で検索している場合はどうなりますか? – moyinho20

答えて

1

は、緯度と長い得ます。

私は以下のように一度にすべての3つのモデル1のレコードの存在を確認し、それらのいずれかが条件を満たしている場合lanlongを得るよりも、他の方法を見ません。

If Country.exists?(name: params[:name]) 
    Country.where(name: params[:name]).select(:lat, :long) 
elsif City.exists?(name: params[:name]) 
    City.where(name: params[:name]).select(:lat, :long) 
elsif Province.exists?(name: params[:name]) 
    Province.where(name: params[:name]).select(:lat, :long) 
else 
    #code if none of them matched the condition 
end 
+0

Allright。私は同じように思った。しかし、3つのテーブルで同じ列を結合して見せることができるかどうかは不思議でした。ありがとうございました –

関連する問題