Ich habe 3 Rollen für Benutzer, nennen Sie es Standard, Premium und Admin. Jeder kann Beiträge posten. Premium und Admin können wählen, ob sie private Posts oder nicht private Posts machen wollen (privat: false oder private: true). Standardbenutzer können nicht wählen, ob ihre Post privat ist/nicht; Standardmäßig haben alle Posts von Standardbenutzern den Status "Private: nil".Ruby on Rails ternären Operator zu BEIDE Null und falsch
Fassen wir zusammen:
- Beiträge Standard Benutzer immer privat sein: nil
- Premium/Admin Beiträge des Benutzers entweder privat sein kann: true oder privat: false
ich bin versucht, einen Bereich erstellen, so dass, wenn ein Standardbenutzer die Indexseite anschaut, Beiträge mit Private: nil und Private: false angezeigt werden, während Premium- und Admin-Benutzer alle anzeigen können. Mein Problem ist, ich kann nicht mit ternären Operatoren kommen, die Standardbenutzer erlaubt, sowohl private: nil als auch private: false Posts zu sehen. Diese
ist, was ich habe auf Beitrag Modell:
scope :visible_to, -> (user) { user.admin? || user.premium? ? all : where(private: false) || where(private: nil)}
Der obige Code zeigt nur Beiträge mit Privat: false. Ich habe versucht, verschiedene Kombination:
... where(private: false || nil)}
Zeigt nur privat: false Beiträge
... where(private: nil || false)}
Zeigt nur privat: nil Beiträge
... where(private: nil && false)}
Zeigt nur privat: nil Beiträge
... where(private: false && nil)}
Zeigt nur privat: false Beiträge
und mehrere andere Kombinationen -
Ich habe auch bemerkt, dass, wenn ich die Reihenfolge falsch und Null geschaltet, es unterschiedliche Ergebnisse angezeigt werden. Ich dachte || oder & & Operatoren sind nicht-kommutative. Vielleicht gibt es etwas über Scoping oder ternäre Operatoren, die mir nicht bekannt waren ...
Danke!
Haben Sie darüber nachgedacht eine Berechtigungs Bibliothek wie [Pundit] (https://github.com/elabs/pundit) mit? – mysmallidea