Frage

Ich habe die Modellagentur auf der Grundlage von Defise:

class Agency < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :name, :email, :phone, :address, :city, :state, :zip,
                  :notes, :is_admin, :password, :password_confirmation, :remember_me

  protected

  def password_required?
   !persisted? || password.present? || password_confirmation.present?
  end
end

Ich habe auch den Agenturen-Controller anhand von active_scaffold:

class Admin::AgenciesController < Admin::BaseController
  before_filter :authorize_admin!

  active_scaffold :agency do |conf|
    actions.exclude :show

    create.link.page = true
    update.link.page = true

    list.columns = [
      :name, :email, :phone, :address, :city, 
      :state, :zip, :notes, :events, :is_admin
    ]

    create.columns = [
      :name, :email, :phone, :address, :city, :state, :zip, 
      :is_admin, :password, :password_confirmation
    ]

    update.columns = [
      :name, :email, :phone, :address, :city, :state, :zip, 
      :is_admin, :password, :password_confirmation
    ]

    columns.add :password
    columns.add :password_confirmation    

    columns[:password].form_ui = :password
    columns[:password_confirmation].form_ui = :password
  end
end 

Dann ist hier Agency-Update-Format:
enter image description here

Ich möchte eine Gelegenheit für den Benutzer bereitstellen, das Abfüllen von Kennwort- und Kennwort- und Kennwort-Feldern auszusetzen. Wenn der Benutzer jedoch das Kennwortfeld füllt, muss das Feld Password_Confirmation erforderlich sein.

Ich habe mein Problem fast gelöst mit Password_Required? Methode. Aber JavaScript Erforderliche Überprüfung des Kunden erlaubt mir nicht, mein Problem vollständig zu lösen.

enter image description here

Wie kann ich JS-Variationen vom Client für Kennwort- und Kennwort- und Kennwort-Felder entfernen?

War es hilfreich?

Lösung

Versuchen:

validates_confirmation_of :password, :if => :password_required?

validates :password_confirmation, :presence => true, :if => '!password.nil?'

Beachten Sie, dass die Validierung nur ausgelöst wird, wenn password_required? kehrt wahr zurück, und password_required? wird falsch zurückgeben, wenn das password_confirmation Feld ist null.

Also um zu machen password_confirmation Feld, um Null zu sein, müssen Sie einfach das entfernen password_confirmation Feld aus dem Formular und auf diese Weise werden Sie es immer neigen, um die Validierungen umzugehen.

Alternative Lösungen:

1) Überspringen Sie die Überprüfung des Kennwortfelds

2) Speichern Sie einfach eine zufällige sicher generierte Nummer im Feld Kennwort (besser, weil es einfach ist und die Konsistenz aufrechterhalten).

self.password = self.password_confirmation = SecureRandom.urlsafe_base64(n=6)

Wenn Sie möchten, dass solche Felder anders angegeben werden sollen, wie der Benutzer, dann können Sie ein einzigartige Passwörter angeben, so dass Sie später einzigartige Kennwörter angeben.

if(self.password == "something unique" and self.password_confirmation == "something unique")
    flash[:notice] = "The user has not password"
end

Auf der UI-Ebene zeigen Sie einfach mit dem obigen Zustand mit dem Rohling an.

Andere Tipps

@Saurabh Jain, vielen Dank für Ihre Ratschläge.
Die Lösung war jedoch so sehr einfach.
Ich habe herausgefunden, dass Active_SCAFCAFFOLD ein erforderliches Attribut für das Eingabe-Tag des Kennwortfelds hinzufügt.
Mit einem anderen Wörtern erhält ein Client ein HTML

<input type="password" required="required" size="30" name="record[password_confirmation]" id="record_password_confirmation_4" class="password_confirmation-input text-input" autocomplete="off">

Genaues Erforderliches Attribut war mein Problem :), um es von HTML zu entfernen, fügen Sie einfach die Zeile hinzu

columns[:password].required = false;

zur active_scaffold-konfiguration in admin :: agenturscontroller (siehe oben)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top