2016-03-06 122 views
0

我有以下型號:Rails的activerecords嵌套包括

class BusinessProcess < ActiveRecord::Base 
    has_many :todos 
end 

class Todo < ActiveRecord::Base 
    has_one :row 
end 

class Row < ActiveRecord::Base 
    has_many :users 
end 

我怎麼能算的rowsBusinessProcess具有對特定user行數?

是這樣的:

@businessProcess.todos.includes(XXX).where(users.id=?,1).count

+0

請問您可以添加ActiveRecord類的代碼嗎?至少是協會。順便說一下* @processProcess *不是很Rubyish。 –

+0

我一直在看你的問題。你能澄清一件事嗎?在'Row'中,你有'has_many:users'。這意味着,我認爲'User'應該有一個'belongs_to:row'。那麼看起來像'User'只能有一個'Row'。它是否正確?看起來很奇怪,因爲'User'可能會有很多行,在這種情況下,您需要一個多對多的連接模型。謝謝。 – jvillian

回答

0

@ businessProcess.todos.includes(:行=>:用戶)。凡( 「?users.id =」,1).Count之間

+0

如果您只是要計算BusinessProcess中的行數,這不是一個適當的解決方案,因爲您也實例化所有Todo對象,Row對象和User對象。這很慢。 –

+0

在這種情況下行是一個模型,而不是一個普通的行。我想要的是通過待辦事項統計屬於BusinessProcess的行。我看不到其他方式。你做? – user3618353

0

根據

class Todo < ActiveRecord::Base 
    has_one :row 
    has_many: users, through: :row 

    scope :by_user_id, ->(user_id) { 
    joins(:users).where("users.id = ?", user_id) 
    } 
end 

然後:

你的協會,我寧願與剛剛加盟的表像去
@business_process.todos.by_user_id(1).count 

也許你也可以認爲移動其中條件爲的範圍,但更多的是責任的thingie。 你也可以閱讀關於ARel作爲替代:The N+1 problem and ARel