Ruby on rails rails根据另一个表中的查找更新字段

Ruby on rails rails根据另一个表中的查找更新字段,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个用户模型有很多联系人,联系人模型属于用户。要发送邀请,我需要知道用户表中是否已经存在用户的联系人,并更新联系人中的状态字段。我的常用字段是电话号码 因此,过于简单化的我有: 用户:身份证,电话号码 联系人:id、姓名、电话、状态、用户id 如何有效地将用户联系人的状态设置为“已注册” 我目前有这个迭代,它可以工作,但必须有一个更好的方法: all_contacts = Contact.where(user_id: user).where.not(phone: nil) all_conta

我有一个用户模型有很多联系人,联系人模型属于用户。要发送邀请,我需要知道用户表中是否已经存在用户的联系人,并更新联系人中的状态字段。我的常用字段是电话号码

因此,过于简单化的我有:

用户:身份证,电话号码

联系人:id、姓名、电话、状态、用户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

如果仅当用户有电话号码时才想将其状态更新为“已注册”,则可以将其ID存储在阵列中,例如,在其中,然后可以使用如下方法:

User.update(your_array_of_ids, status: "registered")
您可以尝试以下操作:

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")

我想你误解了这个问题。如果用户表中存在联系人的电话号码,我想更新每个联系人的状态谢谢!这正是我想要的。这样,就不需要迭代了。join和where子句用于查找注册为用户的联系人。数据库在这方面非常有效,可以根据需要使用索引和内存。