Ich möchte eine Site-weite Ankündigung Feature in meiner Rails App implementieren.So implementieren Sie Ankündigungen in Ruby on Rails App mit pro Benutzer Kontrolle von gelesen/angezeigt
Administratoren können Ankündigungen erstellen und start_date und expiration_date definieren.
Ich würde auch gerne wissen, wenn ein Benutzer eine Ankündigung angesehen hat, und wenn er auf "Ankündigung" geklickt hat, würde es nicht mehr in der Ansicht angezeigt.
Nachdem ich darüber nachgedacht habe, überlege ich, eine Has Many :through
Modellverknüpfung zu erstellen. Grundsätzlich ein User has_many Announcements through: UserAnnouncements
.
Also würde ich zwei neue Modelle erstellen, eine Vorankündigung (wo Admins den Text festlegen würden, Start- und Enddatum) und eine Join-Tabelle (UserAnnouncements), wo ich die Informationen über den jeweiligen Status des Benutzers speichern könnte Ankündigung (viewed
und dismissed
grundsätzlich).
Wäre das ein vernünftiger Ansatz?
Meine Hauptfrage ist jetzt in der Erstellung von Ankündigungen. Ich habe 15k Benutzer, und es dauert viel Zeit, die anouncements zu schaffen, wenn ich es wie folgt tun:
User.find_each do |user|
announcement = Announcement.new
announcement.user = user
announcement.save
end
Dies dauert etwa 30 Sekunden zu laufen. Was wäre wenn ich 100k Benutzer hätte?
Würde ein vernünftiger Ansatz, um die Announcement
Modelle werden schaffen und zeigt es jeden Benutzer, unless
es hatte ein HideAnnouncement
Modell, das user_id == current_user
? Wie würde ein solcher ActiveRecord aussehen?
Ich schlage vor, erstellen Sie eine Assoziation Datensatz nach Anzeige oder Kündigung Ankündigung. Und zeigen Sie die Ankündigung an, es sei denn, es gibt einen Datensatz in der Zuordnungstabelle mit dem bestimmten Benutzer. Stellen Sie außerdem sicher, dass "user_id" und "answer_id" indexiert sind. Nach dem Erstellen der Ankündigung müssen Sie keinen zusätzlichen Datensatz für jeden Benutzer erstellen. – Kkulikovskis