egg*_*oll 5 haml devise ruby-on-rails-4 bootstrap-modal bootstrap-4
我为Devise注册创建了一个Bootstrap模式,可以通过着陆页导航栏上的链接访问.模态正常工作,即创建用户.但是当我尝试将密码长度提示添加到密码输入时 - 什么都没有.我检查了Devise实例变量@minimum_password_length的值,它是nil.有什么建议?
Rails 4.2.6,Ruby 2.3.0,Bootstrap 4.0.0.alpha3,Devise 4.0.0,Simple Form 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
...
Run Code Online (Sandbox Code Playgroud)
/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
...
Run Code Online (Sandbox Code Playgroud)
/app/models/user.rb
...
devise :confirmable,
:database_authenticatable,
:registerable,
:recoverable,
:rememberable,
:trackable,
:validatable
...
Run Code Online (Sandbox Code Playgroud)
/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'
Run Code Online (Sandbox Code Playgroud)
/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'
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
/config/routes.rb
root to: 'landing_page#index'
devise_for :users
...
Run Code Online (Sandbox Code Playgroud)
我刚刚通过将@minimum_password_length交给视图控制器函数中的视图解决了这个问题.您可以使用您的设计模型访问minimum_password_length.就我而言,它是用户模型.在代码中:
@minimum_password_length = User.password_length.min
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |