3

我有一堆或地址,它通過多態關聯具有多態性資源

belongs_to :addressable, :polymorphic => true 

和我的資源屬於其他各種資源的紅寶石地理編碼的寶石,可以說,它是一個酒店

has_one :address, :as => :addressable 

我可以搜索我的地址數據沒有問題,找到我的搜索字符串半徑20英里的每個地址例如

@addresses = Address.near(params[:search],20, :order => :distance).page params[:page] 

我真的很努力地加入資源,即酒店信息,我可以鏈接到一個詳細信息頁面,但我想在我的結果中顯示酒店的名稱。

我想用:包括可能就此幫助:

@addresses = Address.near(params[:search],20, :order => :distance, :include => :hotel).page params[:page] 

..但沒有運氣

任何意見極大的讚賞。

回答

4

好,我想通了一點點幫助,從同事

@addresses = Address.where(addressable_type: 'Hotel').near(params[:search],20, :order => :distance).includes(:addressable).page params[:page] 

希望它可以幫助別人!

+0

祝賀解決方案。如果可以,請確保將您的答案標記爲「已接受」,以便其他人可以向您學習成功。乾杯〜 –

0

您的地址模式,我會定義與酒店模型

belongs_to :addressable, :polymorphic => true 
belongs_to :hotel, -> { where(adresses: {addressable_type: 'Hotel'}) }, foreign_key: 'addressable_id' 

像這個答案很好解釋的關係,Eager load polymorphic

然後,像在地理編碼器的文檔解釋https://github.com/alexreisner/geocoder#known-issue 我會找到酒店按位置做以下操作:

Address.near(generic_address, radius, :select => "addresses.*, hotels.*").joins(:hotel)