所以即时学习rails,并按照rails入门指南(我实际上在Udemy rails课程上完成了“博客应用程序”,但我确保我可以先从头开始编写它然后再继续)。
无论如何,我已经删除/创建了运行,但我正在添加验证...并且验证工作时我的错误没有显示。
现在我的页面非常简单:
new.html.erb
<% if @user.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved
</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= form_with scope: :user, url: users_path, local: true do |form| %>
<p>
<%= form.label :username %><br>
<%= form.text_field :username %>
</p>
<p>
<%= form.label :name %><br>
<%= form.text_field :name %>
</p>
<p>
<%= form.label :age %><br>
<%= form.number_field :age %>
</p>
<p><%= form.submit %></p>
<% end %>
users_controller
class UsersController < ApplicationController
def index
@users = User.all
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def create
@user = User.new(params.require(:user).permit(:username,:name,:age))
if @user.save
redirect_to users_path
else
render 'new'
end
end
def update
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
end
所以,如果我进入开发工具的网络选项卡,这很奇怪,我可以看到它出现在响应标签中:
<div id="error_explanation">
<h2>
1 error prohibited this user from being saved
</h2>
<ul>
<li>Username has already been taken</li>
</ul>
</div>
但它并没有出现在Chrome开发工具的“元素”中。我重新启动了rails ......所以我真的不确定为什么这些元素没有显示出来。我安装了bootstrap 4.00 beta,但不确定为什么这很重要。这是rails 5.1.4 btw。
答案 0 :(得分:2)
这是因为你没有在<% if @user.errors.any? %>
试试这个:
<%= form_with scope: :user, url: users_path, local: true do |form| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved
</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= form.label :username %><br>
<%= form.text_field :username %>
</p>
<p>
<%= form.label :name %><br>
<%= form.text_field :name %>
</p>
<p>
<%= form.label :age %><br>
<%= form.number_field :age %>
</p>
<p><%= form.submit %></p>
<% end %>