2013-05-15 19 views
1

我試圖用主機記錄(id,hostname,netid)和具有表示兩個路由之間的連接的路由連接的表建模(id,src_id,src_ip,dst_id ,dst_ip)。無法:包含具有兩種關係的模型

當我嘗試檢索主機的所有路由記錄時:包括主機表(以便我可以獲取主機名),它只檢索路由記錄。我究竟做錯了什麼?

class Host < ActiveRecord::Base 
    has_many :routes 
end 

class Route < ActiveRecord::Base 
    belongs_to :srchost, :class_name => 'Host', :foreign_key => 'src_id' 
    belongs_to :dsthost, :class_name => 'Host', :foreign_key => 'dst_id' 
end 

x = Route.where(:src_id => host).includes(:srchost, :dsthost) 
puts x.inspect 
+0

你可能會想試試這個:'Route.includes(:主機)。凡(:src_id =>主機)' – depa

+0

謝謝,但沒有命名的主機關聯。我得到的錯誤'協會名'主機'沒有被發現' – Michelle

+0

當你用':srchost,:dsthost'替換':host'時它工作嗎? – depa

回答

1

使用自定義sql因爲包括不返回關聯模型。 Route.find_by_sql('select hosts。* ...'),或者你可以使用insin包含的連接和select('hosts。*')。例如:

User.joins(:posts).select('posts.title') 
相關問題