2010-10-21 22 views
0

,如果我有以下幾點:導軌 - 瞭解如何查詢一個Objectin的Rails 3

@projects = Permission.where(["user_id >= ?", 21]) 

結果:

[#<Permission id: 59, project_id: 13, user_id: 21>, #<Permission id: 59, project_id: 13, user_id: 21>] 

使用,然後我什麼那些PROJECT_ID的到查詢,如下所示:

AuditLog.where({ :project_id => @projects }).limit(10) 

但是這個錯誤?

NoMethodError: undefined method `project_id' for [#<Permission id: 59, project_id: 13, user_id: 21>]:ActiveRecord::Relation 

想法?謝謝

回答

1

首先,讓我們來收拾你的第一個查詢:

@permissions = Permission.where(['user_id >= ?', 21]) 

這是什麼@permissions實際存儲更少誤導。接下來,請記住它是一個數組,並且您在下一個查詢中所說的內容是「where project_id是ruby權限對象的列表」,並且不會生成有效的查詢。

雖然你可以得到你想要的信息。首先,使用Ruby的array.map方法,通過所有權限走路,收集他們的PROJECT_ID的:

@project_ids = @permissions.map(&:project_id) 

現在你可以告訴數據庫獲取所有審計日誌,其中PROJECT_ID是在列表中:

@audit_logs = AuditLog.where(['project_id in (?)', @project_ids]) 

那應該給你你需要的東西。如果您有任何問題,請告訴我。

+0

哇 - 謝謝! – user479959 2010-10-21 04:41:40

+0

quick type,user_id> =?',21應該是正確的? – user479959 2010-10-21 04:50:18

+0

您在原始查詢中使用了「> =」,因此我複製了該查詢。但更有意義的是,你在大多數情況下都需要精確匹配。 – 2010-10-21 04:56:30