2013-03-04 70 views
0
  • 用戶有很多網站
  • 網站有很多控制器
  • 控制器有許多檢查

這是我的時刻。添加「其中」條款的Rails「包括」在ActiveRecord的

current_user 
    .sites 
    .joins(:controllers) 
    .where('controllers.inspections_enabled = true') 
    .all(:include => [:controllers => [:inspections]]) 

這給了我:

「所有網站中的控制器被啓用,所有控制器和檢查」

我想

「所有網站中的控制器開啓,並且包括僅具有'inspections_enabled = true'的控制器,其全部是兒童檢查「

在此先感謝

+1

你爲什麼包括'在渴望負荷controllers'。由於您的加入,它已經加載到內存中。我認爲你應該是'current_user .sites .joins(:controllers) .where('controllers.inspections_enabled = true') .all(:include => [:inspections])' – codeit 2013-03-04 17:46:05

回答

3

你應該定義已定義的條件的關聯,請參閱docs

如果你想急於負載關聯的只有一些成員是 通常更自然包括具有 上定義條件的關聯它。

你的情況

class Site < ActiveRecord::Base 
    has_many :inspections_enabled_controllers, 
      :class_name => 'Controller', 
      :conditions => ['inspections_enabled = ?', true] 
end 

current_user 
    .sites 
    .joins(:inspections_enabled_controllers) 
    .all(:include => [:inspections])