我有3種型號:Ruby on Rails的ActiveRecord的3路連接
class ProductLine < ActiveRecord::Base
has_many :specifications
has_many :specification_categories, :through => :specifications,
end
class Specification < ActiveRecord::Base
belongs_to :product_line
belongs_to :specification_category
end
class SpecificationCategory < ActiveRecord::Base
has_many :specifications
has_many :product_lines, :through => :specifications
end
基本上,我們顯示的規格數據的產品網頁上的一個子集,我們想這樣做(例如只,是的,我知道的N + 1):
控制器:
@product_line = ProductLine.find(params[:id])
@specification_categories = @product_line.specification_categories)
查看:
@specification_categories.each do |specification_category|
...
specification_category.specifications.each do |specification|
...
end
end
這裏的問題是讓rails過濾ProductLine的規範。我試過構建查詢來做到這一點,但當最終的關聯被調用時,它總是生成一個單獨的NEW查詢。即使我們現在沒有使用上面的代碼(這裏不是一個好主意,因爲我們可能會遇到N + 1問題),但我想知道是否有可能通過關聯過濾進行三方加入。有沒有人跑過這種情況?你能提供一個我如何在這裏完成的例子嗎?
您可以請分享您的日誌,顯示SQL語句。 ActiveRecord盡力優化數據庫調用,有時會使用多個調用,我們期望只有一個調用。此外,您的目標是僅僅進行一次數據庫調用,還是優化數據庫訪問時間? –