rails更新字段基于另一个表中的find

时间:2017-02-08 22:41:10

标签: ruby-on-rails activerecord

我有一个用户模型(has_many联系人)和一个联系人模型(belongs_to用户)。要发送邀请,我需要知道用户表中是否已存在用户的联系人,并更新联系人中的状态字段。我的共同领域是电话号码。

我过于简单化了:

用户:id,电话

联系人: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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

如果您要将用户状态更新为"已注册"只有当他们有电话号码时,您才能将他们的ID存储在一个数组中(例如,使用where,然后您可以使用update方法,如下所示:

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