2017-02-08 97 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

相关问题