感谢您的耐心等待。对Rails来说还是一个新手。
使用Rails 3.2
为简单的应用制作注册页面。我的问题是,我的表单上的提交按钮不会产生任何影响,无论表单中的信息是否有效。
用户模型和数据库似乎都运行良好。如果我从rails控制台手动添加用户,它会将其添加到数据库中。据我所知,问题似乎是由form_for生成的形式。
以下是相关网页:
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
<div class="span6 offset3>
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
这是我的用户控制器:
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Thank you for signing up! Please check your email to confirm your account."
redirect_to @user
else
render 'new'
end
end
end
提交不会导致任何类型的错误 - 根本不会导致任何事情发生。所以日志中没有有价值的信息。
提前感谢您的任何见解。
编辑:从/shared/_error_messages.html.erb部分
添加代码<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
答案 0 :(得分:10)
在仔细编码中,这是一个很好的小课:
<div class="row">
<div class="span6 offset3>
<%= form_for(@user) do |f| %>
应该是:
<div class="row">
<div class="span6 offset3**"**>
<%= form_for(@user) do |f| %>
结束标记可以产生相当大的差异。
答案 1 :(得分:0)
我认为问题在于您没有将错误传递给shared/error_messages
部分错误。你必须在那里传递@user。但我不确定,因为我没有看到shared/error_messages
部分。我想让它给你更详细的答案。
答案 2 :(得分:0)
在此控制器中替换此行:@user = User.new(params[:user])
:@user = User.new(user_params)
总是在你的控制器中,methode users_params应该是:
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
对我来说效果很好!
答案 3 :(得分:0)
如果您来到此页面,想知道为什么您的按钮没有提交,请检查以下内容:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<style>
main {
padding: 15px;
background: #000;
}
.navbar-search {
position: relative;
padding: 0px 15px;
}
.navbar-input {
width: calc(100% - 80px);
}
.navbar-button {
width: 75px;
}
.autocom-box ul {
background: #fff;
}
.autocom-box li {
background-color: white;
color: black;
padding: 10px 20px;
}
.autocom-box {
position: absolute;
z-index: 9999;
border-top: 1px solid black;
box-shadow: 4px 4px 8px -1px black;
width: 100%;
}
</style>
</head>
<body>
<main>
<div id="buscqueda" class="navbar-search smallsearch">
<div class="col-sm-8 col-xs-11">
<div class="row">
<input class="navbar-input" type="" placeholder="Buscar productos" name="">
<button class="navbar-button"> <svg width="15px" height="15px">
<path
d="M11.618 9.897l4.224 4.212c.092.09.1.23.02.312l-1.464 1.46c-.08.08-.222.072-.314-.02L9.868 11.66M6.486 10.9c-2.42 0-4.38-1.955-4.38-4.367 0-2.413 1.96-4.37 4.38-4.37s4.38 1.957 4.38 4.37c0 2.412-1.96 4.368-4.38 4.368m0-10.834C2.904.066 0 2.96 0 6.533 0 10.105 2.904 13 6.486 13s6.487-2.895 6.487-6.467c0-3.572-2.905-6.467-6.487-6.467 ">
</path>
</svg> </button>
</div>
<div class="autocom-box row">
<ul>
<li>producto 1</li>
<li>producto 2</li>
<li>producto 3</li>
<li>producto 4</li>
</ul>
</div>
</div>
<div class="clearfix"></div>
</div>
</main>
</body>
</html>
(隐藏的)并且没有出现(这花了我一生中痛苦的两个小时才发现 - 希望它没有白费。)立>