2017-02-08 125 views
0

我有一個用戶模型(has_many contacts)和一個聯繫人模型(belongs_to user)。要發送邀請,我需要知道用戶表中是否存在用戶的聯繫人,並更新聯繫人中的狀態字段。我常見的領域是電話號碼。基於在另一個表中查找rails更新字段

所以簡單化,我有:

用戶:身份證,手機

聯繫人:ID,姓名,電話,狀態,user_id說明

我怎樣才能將狀態設置爲 「註冊」 爲用戶的聯繫人以有效的方式?

我現在有這個迭代,這工作,但必須有一個更好的辦法:

all_contacts = Contact.where(user_id: user).where.not(phone: nil) 
all_contacts.each do |contact| 
    a = User.find_by(phone: contact.phone) 
    if a 
    contact.status = 'registered' 
    contact.save 
    end 
end 

回答

1

您可以嘗試以下操作:

contacts = Contact.joins(:user).where("users.phone=contacts.phone and contacts.phone not NULL") 
contact_ids = fetch ids from contacts array 
Contact.update(your_array_of_ids, status: "registered") 
+0

謝謝!這正是我所期待的。這樣,就不需要迭代。 join和where子句處理查找註冊爲用戶的聯繫人。數據庫在這種情況下非常高效,根據需要使用索引和內存。 – Augusto

0

如果您想更新的用戶爲「註冊」,只有當他們有一個電話號碼的狀態,然後你可以存儲在一個數組(使用where例如它們的ID,然後你可以使用update方法是這樣的:

User.update(your_array_of_ids, status: "registered") 
+0

我想你誤解了這個問題。如果聯繫人的電話號碼存在於用戶表中,我想更新每個聯繫人的狀態 – Augusto

相關問題