2016-04-21 4 views
4

Ich habe ein Bootstrap-Modal für die Devise-Anmeldung erstellt, das über einen Link auf der Zielseiten-Navigationsleiste aufgerufen werden kann. Das Modal funktioniert ordnungsgemäß, d. H. Es wird ein Benutzer erstellt. Aber wenn ich versuche, den Kennwortlängenhinweis zur Passworteingabe hinzuzufügen - nichts. Ich habe den Wert der Devise-Instanzvariablen @minimum_password_length überprüft und es ist null. Irgendwelche Vorschläge?Rails/Devise/Bootstrap: Zugriff auf @minimum_password_length im Anmeldemodal fehlgeschlagen

Rails 4.2.6 Ruby 2.3.0, Bootstrap 4.0.0.alpha3, Entwickeln 4.0.0 Einfaches Formular 3.2.1

/config/initializers/devise.rb

... 
if Rails.env.test? || Rails.env.development? 
    config.password_length = 2..128 
else 
    config.password_length = 8..128 
end 
... 

/db/migrate/20160417123456_devise_create_users.rb

... 
## Confirmable 
t.string :confirmation_token 
t.datetime :confirmed_at 
t.datetime :confirmation_sent_at 
t.string :unconfirmed_email # Only if using reconfirmable 
... 
add_index :users, :confirmation_token, unique: true 
... 

/app/Modelle/u ser.rb

... 
devise :confirmable, 
     :database_authenticatable, 
     :registerable, 
     :recoverable, 
     :rememberable, 
     :trackable, 
     :validatable 
... 

/views/shared/_navbar.html.haml

... 
%li.nav-item.pull-xs-right 
    = link_to 'Sign Up', '#signUpModal', data: { toggle: 'modal', target: '#signUpModal' }, id: 'sign-up-nav-link', class: 'account-nav-link nav-link' 

%li.nav-item.pull-xs-right 
    = link_to 'Log In', '#logInModal', data: { toggle: 'modal', target: '#logInModal' }, id: 'log-in-nav-link', class: 'account-nav-link nav-link' 

/app/views/shared/_sign_up_modal.html.haml

#signUpModal.modal.fade{ tabindex: '-1', role: 'dialog', aria: { labelledby: 'signUpModalLabel', hidden: 'true' } } 
    .modal-dialog{ role: 'document' } 
    .modal-content 

     .modal-header 
     %button.close{ type: 'button', data: { dismiss: 'modal' }, aria: { label: 'Close' } } 
      %span{ aria: { hidden: 'true' } } 
      %i.fa.fa-times-circle 
     %h4#signUpModalLabel.modal-title Sign Up 

     = simple_form_for resource, as: resource_name, url: registration_path(resource_name) do |f| 

     .modal-body 

      = f.error_notification 

      %fieldset.form-group 
      = f.input :email,     label:  'Email Address', 
               required:  'true', 
               autocomplete: 'off', 
               input_html: { id: 'email-input', class: 'form-control' } 

      %fieldset.form-group 
      = f.input :password,    label:  'Password', 
               required:  'true', 
               autocomplete: 'off', 
               input_html: { class: 'form-control' }, 
               hint:  ('Min. length of #{ @minimum_password_length }' if @validatable) 
      %fieldset.form-group 
      = f.input :password_confirmation, label:  'Password Confirmation', 
               required:  'true', 
               autocomplete: 'off', 
               input_html: { class: 'form-control' } 

      %fieldset.form-group 
      = f.input :subdomain,    label:  'Subdomain', 
               required:  'true', 
               autocomplete: 'off', 
               input_html: { class: 'form-control' } 

      - if devise_mapping.rememberable? 
      = f.input :remember_me,   label:   'Remember me', 
               as:   :boolean, 
               boolean_style: :inline 

     .modal-footer 
      .actions 
      = link_to 'Cancel', 'javascript:;', data: { dismiss: 'modal' }, class: 'btn btn-sm btn-secondary' 
      = f.button :submit, 'Sign Up', disable_with: 'Creating account...', class: 'btn btn-sm btn-primary' 

/app/helpers/application_helper.rb

def resource_name 
    :user 
end 

def resource 
    @resource ||= User.new 
end 

def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
end 

/config/routes.rb

root to: 'landing_page#index' 
devise_for :users 
... 

Antwort

5

ich dieses Problem nur gelöst werden, indem die @minimum_password_length in der Ansichten-Controller-Funktion zur Ansicht übergeben. Sie können auf das Minimum_password_length zugreifen, indem Sie Ihr Modell verwenden. In meinem Fall ist es das Benutzermodell. In Code:

@minimum_password_length = User.password_length.min