我正在尝试将Devise集成到我的应用程序中。我需要在页面顶部实现登录表单(我已将此表单实现为布局页面),并且已实施包含注册表单的注册。 但是,当我尝试提交不正确的注册数据时,它显示两种形式的验证错误。设计。在同一页登记和登录
10
A
回答
6
没有更多的信息,很难猜测问题是什么。我已经找到了维基网页是真正有用的(并且越来越等等),虽然你可能已经他们看了过来:
两个页面,可能会满足您的要求:
希望这会有所帮助!
- FF
0
你应该有两个页面上的形式 - 一个用于注册和一个用于注册。如果你想要一个表单和多个可能的动作,你需要一个按钮来处理客户端,并根据你想创建一个用户或者一个会话来改变表单的动作&方法到适当的路由。
如果你认为你已经这样做了,那么问题几乎肯定存在于你的代码中。如果你想和我们分享,我们也许可以指出你可能错过的东西。
3
看到这两种形式的验证错误的问题源于2件事情。首先,设计表单使用通用的“资源”帮手。这将创建一个用户对象,并且同一个用户对象用于注册和登录表单。其次,设计错误通常使用'devise_error_messages!'显示帮助者使用相同的共享资源。
要登录并注册同一页面,您需要为每个表单创建不同的用户对象,并显示错误消息的新方法。
首先,你需要创建自己的登记控制器(在应用程序/控制器/用户/)
class Users::RegistrationsController < Devise::RegistrationsController
include DevisePermittedParameters
protected
def build_resource(hash=nil)
super
# Create an instance var to use just for the sign up form
@sign_up_user = self.resource
end
end
和更新的文件航线相应
devise_for :users, controllers: {
registrations: 'users/registrations'
}
接下来,您将需要你自己的错误消息和资源助手。创建像devise_single_page_helper.rb一个新的帮手,并添加以下内容:
module DeviseSinglePageHelper
def devise_error_messages_for_same_page(given_resource)
return "" if given_resource.errors.empty?
messages = given_resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = I18n.t("errors.messages.not_saved",
count: given_resource.errors.count,
resource: given_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 sign_up_user
@sign_up_user ||= User.new(username: 'su')
end
def sign_in_user
@sign_in_user ||= User.new(username: 'si')
end
end
最后,在你的意见,更新您的形式,像这样:
-# The sign up form
= simple_form_for(sign_up_user, url: registration_path(resource_name)) do |f|
-#...
= devise_error_messages_for_same_page(sign_up_user)
-# The sign in form
= simple_form_for(sign_in_user, url: sessions_path(resource_name)) do |f|
#...
= devise_error_messages_for_same_page(sign_in_user)
所有这一切都在一起,为您提供了2个不同的对象 - 1用于注册,1用于注册。这样可以防止其他人显示错误信息。请注意,建议在登录页面上放置这两个表单(并且可能会将默认注册页面重定向到登录页面),因为默认情况下登录尝试失败将重定向到登录页面。
相关问题
- 1. Android登录页面设计
- 2. 设计:在登录
- 3. 设置设计登录是根页
- 4. 登录框设计
- 5. Rails设计登录
- 6. 设计未登录
- 7. 设计不记得登录证书
- 8. 登录每天在设计
- 9. 在登录时设计401
- 10. Json登录多个用户登录在一个登录页面
- 11. 设计一个登录表单,以便IE会记住登录数据
- 12. 设计的登录页面不显示
- 13. 登录页面设计与授权
- 14. 计数传递登录和失败登录在同一个查询?
- 15. PHP登录验证在同一页上?
- 16. Mysql数据库设计的嵌套登录(登录后的另一登录)
- 17. Angularjs处理登录和登录页面
- 18. Drupal 7 - 在同一页面登录/注册 - 登录尝试后登记表中的错误
- 19. 记住我/保持登录状态,在jsp登录页面
- 20. 如何在设计登录后返回上一页
- 21. Facebook登录与设计
- 22. 设计 - 登录子域
- 23. 登录设计逻辑
- 24. 设计重定向登录
- 25. 定制登录设计
- 26. ASP.net登录控制设计
- 27. 设计Confirmable允许登录
- 28. Facebook登录设计邀请
- 29. 多级登录表设计
- 30. 设计登录未完成
你能展示相关视图/控制器代码吗? – 2011-05-23 13:09:02
[检查我的答案](http://stackoverflow.com/a/17001874/1297435)关于这种情况。 – 2013-08-30 08:56:36