2017-03-17 56 views
1

所以我運行了一個.where查詢來選擇一組activerecords。每個記錄都有一個.items關聯,每個關聯的項目都有一個theme_id。無論如何,我可以過濾只有那些有關聯項目的theme_id爲0的記錄,而無需執行每個初始數組或每種顯式循環?Activerecord查詢過濾器之後

爲了說明它更好地:

[P_0,...,P_N]就是我的。哪裏過濾 每個p後獲得具有[I_0,...,1-N] 關聯數組每個我都有一個theme_id。我想只得到那些有一個項目,其theme_id爲0.

回答

0

我不知道你的代碼庫,所以這是在黑暗中刺,但你不能通過預訂獲得相同的數組有點邏輯?

ary = Item.where(theme_id: 0).map {|i| i.association_you_want } 
0

您可以通過joins實現此目的。例如。

MyRecord.joins(:items).where("items.theme_id" => 0).distinct 

distinct是必要的,因爲有兩個項目的記錄否則會在結果中包含兩次。這是數據庫連接如何工作的一個怪癖。

0

ActiveRecord where採用「散列語法」,允許您指定關聯(以及這些關聯的關聯)。 joinswhere之間的交互有點有趣,其中joins需要表名,where需要關聯名稱。這些哈希語法where條件可以根據需要嵌套。

根據我的經驗,最好使用哈希語法(如果可以的話)而不是使用字符串條件。

.joins(:items).where(items: {theme_id: 0}) 
+1

雖然此代碼段可以解決的問題,[包括一個解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於改善您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – DimaSan