我使用Devise进行登录。除了一个例外,一切正常。如果用户在登录页面上输入错误或没有值,则没有任何问题。没有错误或错误消息(使用正确的数据登录正常工作)。
我只在/ session / new页面上遇到此问题。
这是我的观点
.container
.row.text_content_top
.alert.alert-danger
%button.close{ type: "button", "data-dismiss" => "alert"} ×
= devise_error_messages!
.row.text_content_top
.col-md-4.col-md-offset-4
%h2 Sign in
.row.text_content
.col-md-4.col-md-offset-4.well
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
= devise_error_messages!
.input-group.has-feedback
%span.input-group-addon
%i.fa.fa-envelope-o.fa-fw
= f.label :email, class: 'sr-only'
= f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'E-Mail'
.input-group.has-feedback.top-buffer-10
%span.input-group-addon
%i.fa.fa-key.fa-fw
= f.label :password, class: 'sr-only'
= f.password_field :password, autocomplete: 'off', class: 'form-control', placeholder: 'Password'
= f.submit "Login", class: 'btn btn-success btn-large top-buffer-10'
= link_to "Forgot your password?", new_password_path(resource_name), class: 'top-buffer-10'
我的模特
class User < ActiveRecord::Base
has_many :orders
validates :email, presence: true, uniqueness: true
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :lockable
end
我在控制器或其他自定义代码中没有代码
提前谢谢
答案 0 :(得分:1)
根据@JKen13579
的回答,您需要注意Devise不会以传统方式存储用于登录的错误消息(使用errors
object)。相反,Devise使用flash
,这是让一些人失望的原因。
使用integrate Devise error messages教程
,可以this进入您的应用对于设计,你需要覆盖设计处理flash消息的方式。 在“app / helpers / devise_helper.rb”中创建一个名为devise_helper的文件。
在文件内部,您必须创建一个名为的方法 devise_error_messages !,这是告诉的文件的名称 设计如何处理flash消息。
module DeviseHelper
def devise_error_messages!
return '' if resource.errors.empty?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
html = <<-HTML
<div class="alert alert-error alert-block"> <button type="button"
class="close" data-dismiss="alert">x</button>
#{messages}
</div>
HTML
html.html_safe
end
end
<%= devise_error_messages! %>