我意识到以前有人问过这个问题或类似的问题,但我发现的所有建议的解决方案都不适合我。
因此,我正在使用Devise身份验证宝石构建一个网站,最近尝试将Bootstrap用于造型。我让它工作了,但Devise错误消息不再显示在注册页面上(即,告诉用户某些字段不能为空的消息,等等)
(我不确定是Bootstrap的合并打破了局面,但它确实发生在那个承诺的某个地方。)
另外值得注意的是,当注册失败时,用户重定向到的页面URL从"https://my-site-wanderspeak.c9users.io/users"对这个怪物:"https://my-site-wanderspeak.c9users.io/users/sign_up?utf8=%E2%9C%93&authenticity_token=QI2XnYtJnm2VdWbff%2B1HGCHQ21r1aQR7li%2FemTWJni3sP0vl7f%2FeyRDdXVf1iAdRsGpK63swc6UqUEXFvK2Gg%3D%3D%3D&用户%5名字%5D=&用户%5姓氏%5D=&用户%5Dob%282i%29%5D=11&用户%5Dob%283i%29%5D=5&用户%5Dob%281i%29%5D=2017&用户%5电话%5D=&用户%5电子邮件%5D=&用户%5密码%5D=&用户%5Password_confirmation%5D="。两者都是同一个注册页面,但第一个包含错误消息。
我的观点:
<head>
<!-- Include Bootstrap and HTML Kickstart (for style) -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
<link rel="stylesheet" href="/assets/kickstart.css" media="all" /> <!-- KICKSTART -->
<%= stylesheet_link_tag "users" %>
</head>
<body>
<form>
<div class="container" style="background-color:white">
<div class="row" style="text-align:center">
<div class="col-md-12" style="margin-bottom:5px">
<h2>Sign up</h2>
</div>
</div>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="row">
<div class="col-md-6 left-col form-group">
<div class="field padded">
<label>First name:</label>
<%= f.text_field :firstname, size: "20" %>
</div>
<div class="field padded">
<label>Last name:</label>
<%= f.text_field :lastname, size: "20" %>
</div>
<div class="field padded">
<label>Date of birth:</label>
<%= date_select :user, :dob, :start_year => 1900, :end_year => 2017, :use_month_numbers => true, :order => [:month, :day, :year] %>
</div>
<div class="field">
<label>Phone:</label>
<%= f.text_field :phone, :id => "phone", placeholder: "(___) ___-____", size: "16" %>
</div>
<div class="field padded">
<label>Email:</label>
<%= f.email_field :email, placeholder: "(this will be your username)", size: "32" %>
</div>
<div class="field padded">
<label>Password:</label>
<%= f.password_field :password, autocomplete: "off", placeholder: "(6 characters minimum)", size: "24" %>
</div>
<div class="field padded">
<label>Confirm password:</label>
<%= f.password_field :password_confirmation, autocomplete: "off", size: "24" %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12" style="text-align:center">
<div class="actions" style="margin-bottom:20px; margin-top:-10px">
<button class="large purple">Sign Up</button>
</div>
<% end %>
</div>
</div>
</div>
</form>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
(由于某种原因,结束的</body>
标签没有显示。)
我的应用程序.html.erb:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<title>Welcome to the Community Board!</title>
<%= stylesheet_link_tag 'application', 'media' => 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<h1 class="title">Welcome to the Community Board!</h1>
<div id="main">
<% if flash[:notice] %>
<div class="message" id="notice">
<%= flash[:notice] %>
</div>
<% elsif flash[:warning] %>
<div class="message" id="warning">
<%= flash[:warning] %>
</div>
<% end %>
<%= yield %>
</div>
</body>
</html>
我的(编辑的)设备_帮助.rb:
module DeviseHelper
# A simple way to show error messages for the current devise resource. If you need
# to customize this method, you can either overwrite it in your application helpers or
# copy the views to your application.
#
# This method is intended to stay simple and it is unlikely that we are going to change
# it to add more behavior or options.
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-danger">
<button type="button" class="close" data-dismiss="alert">x</button>
<strong>#{messages}</strong>
</div>
HTML
html.html_safe
end
end
如果我还需要提供其他信息,请告诉我。
答案是:从视图中删除<form>
标记。
不知道为什么。