我已经设计并在用户名中添加了注册流程。 我还在mdoel内添加了用户名存在和长度的验证。
注册时如果我没有在验证中输入用户名并且出现flash消息,但在编辑用户上如果我没有输入用户名,则验证会启动,但不会出现闪存。我有'layout/application'
闪存所以它出现在每一页上。
这是我的辅助方法:
module DeviseHelper
def devise_error_messages!
if resource.errors.full_messages.any?
flash.now[:danger] = resource.errors.full_messages.to_sentence
end
return ''
end
end
任何想法都会非常感谢
答案 0 :(得分:1)
设计错误辅助方法仅覆盖与设计相关的更改,请参阅设计错误辅助方法
module DeviseHelper
def devise_error_messages!
return "" if resource.errors.empty?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = I18n.t("errors.messages.not_saved",
count: resource.errors.count,
resource: resource.class.model_name.human.downcase)
html = <<-HTML
<div id="error_explanation">
<h2>#{sentence}</h2>
<ul>#{messages}</ul>
</div>
HTML
html.html_safe
end
def devise_error_messages?
!resource.errors.empty?
end
end
答案 1 :(得分:0)
好的,所以我去看了注册控制器中更新操作的代码,发现我可以在更新失败后添加代码来设置flash。
def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
resource_updated = update_resource(resource, account_update_params)
yield resource if block_given?
if resource_updated
if is_flashing_format?
flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
:update_needs_confirmation : :updated
set_flash_message :notice, flash_key
end
bypass_sign_in resource, scope: resource_name
respond_with resource, location: after_update_path_for(resource)
else
flash.now[:danger] = resource.errors.full_messages.to_sentence <<<< RIGHT HERE
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end
以下是其他人有此问题的代码。