Ich muss ein Kundenformular ändern, wenn sie bar bezahlt haben (der Administrator). Hypothetisches Geld, kein echtes Geld. Also, um die Form zu ändern, ich habe so etwas wie dies verwendet:Wie kann ich überprüfen, ob der aktuelle Benutzer der Administrator in Schienen ist?
if current_user.user_type == :client
show normal form
elsif current_user.user_type == :admin
show normal form + more functionality
end
Also, was ist der beste Weg, um den „user_type“ -Funktion zu implementieren? Ich habe darüber nachgedacht, diese Funktion der Benutzerklasse wie unten hinzuzufügen. Die Rückkehr: Verkäufer und Rückkehr: Klient arbeitet normalerweise. Ich habe das getestet. Kann ich die E-Mail und das Passwort des aktuellen Benutzers überprüfen (Der current_user ist ich, mit dem bereits gemachten Passwort und E-Mail)? Das scheint nicht zu funktionieren. Was ist der beste Weg, es zu tun?
class User < ActiveRecord::Base
has_one :client
has_one :seller
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
acts_as_messageable
def user_type
return :client if self.client(&:info_complete?)
return :seller if self.seller(&:info_complete?)
return :admin if (self.email == '[email protected]' && self.password == 'admintestpass')
end
end
Was ich in der Vergangenheit getan haben, ist eine Spalte der Tabelle Benutzer 'role' oder so ähnlich genannt hinzufügen, es dann eine ENUM machen. Rails Enums sind schön zu benutzen. http://api.rubyonrails.org/v5.1.0/classes/ActiveRecord/Enum.html. Der einzige Grund, warum ich zögere, Ihre Lösung zu unterstützen, ist, dass es, wenn die Logik zur Bestimmung von Rollen komplexer wird, sinnvoller wäre, die Rolle zu speichern, als sie jedes Mal zu berechnen. Wenn Sie möchten, dass ich eine Antwort über die Schritte für die Enum-Lösung gebe, lassen Sie es mich wissen –
@ 0101001101000010 Ja bitte !! Würde mein Weg auch alles langsamer machen? weil es jedes Mal rechnen wird? – LizzyTheLearner
Ich denke, die echte Strafe wird später mit Wartbarkeit kommen, nicht so viel Leistung. Im Moment haben Sie eine ziemlich einfache Möglichkeit zu sagen, wer Admin ist, aber was, wenn sich diese Regel ändert? Was passiert, wenn Sie einen anderen Administrator erstellen, dessen E-Mail-Adresse 'me @ random.hotmail.net' lautet? Sie müssten Ihre Regel ändern, und wenn Sie schließlich Dutzende von Admins haben, wird es ein Alptraum sein, eine Regel zu erlassen, die sie alle regelt. Es ist einfacher, Benutzerrollen dauerhaft zu speichern. Ich erstelle normalerweise eine Admin-Seite, auf der Administratoren Benutzerrollen ändern können. Außerdem ist es normalerweise keine gute Idee, ein Benutzerkennwort zu überprüfen. –