所以我正在学习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,但不确定为什么这很重要。这是轨道5.1.4顺便说一句。
这是因为你没有在<% if @user.errors.any? %>
中获得相同的@user
试试这个 :
<%= 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 %>