Ich habe ein Benutzermodell (has_many Kontakte) und ein Kontaktmodell (gehört zu Benutzer). Um Einladungen zu senden, muss ich wissen, ob die Kontakte eines Benutzers bereits in der Benutzertabelle vorhanden sind, und ein Statusfeld in Kontakte aktualisieren. Mein allgemeines Feld ist die Telefonnummer.Schienen Update-Feld basierend auf finden in einer anderen Tabelle
So vereinfachend ich habe:
Benutzer: id, Telefon
Kontakt: ID, Name, Telefon, Status, user_id
Wie kann ich Status gesetzt "registriert", um für einen Kontakt des Benutzers auf effiziente Weise?
Im Moment habe ich diese Iteration, die funktioniert, aber es muss ein besserer Weg sein:
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
Vielen Dank! Genau das habe ich gesucht. Auf diese Weise ist keine Iteration erforderlich. Die Join- und Where-Klausel behandelt die Suche nach Kontakten, die als Benutzer registriert sind. Datenbanken sind bei solchen Dingen sehr effizient, wenn sie Indizes und Speicher verwenden. – Augusto