2017-07-17 76 views
0

我有型號UserTag之間ManytoMany關聯安裝,假設如果我做導軌 - 過濾的結果,如果它們匹配的關聯

users = User.all 

這會給我所有的用戶,我要過濾這些記錄,如果他們在ManyToMany伴隨可以說tag_id55

對於單個對象,我知道我能做到users.first.tags.exists?(55),這會給truefalse機器人如何在一個執行此包含100條記錄的users? 我的問題是

  1. 正在使用循環的唯一方法來實現這一目標?
  2. 如何從users中刪除關係不存在的記錄?
  3. 我在users中有數百條記錄,所以我需要以一種不影響性能的方式來做到這一點。

我真的很感激任何反饋意見。

回答

1

您可以訪問用戶的標籤ID 55這樣

@user = User.joins(:tags).where("tags.id = ?" ,55) 

OR

@user = User.includes(:tags).where(tags: {id: 55}) 

您也可以通過這種方式

tags_id = [55,56,57,58,59] 
@user = User.joins(:tags).where("tags.id IN = (?)" ,tags_id) 

篩選標記的多個ID您可以使用此查詢查找關聯是否存在

User.includes(:tags).where(:tags => { :id => nil }). 

它會給所有沒有任何標籤的用戶。

+0

你能解釋一下這裏發生了什麼嗎? – Saadia

+0

所以它會加入2個表格的用戶和標籤。這是通過rails的標準查詢。它用於更好的性能。它將在一個查詢中獲取所有記錄。 – Vishal

+0

@Saadia你可以接受這個答案,如果它對你有幫助 – Vishal