Rails错误没有显示?

时间:2017-12-18 20:27:37

标签: ruby-on-rails

所以即时学习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。

1 个答案:

答案 0 :(得分:2)

这是因为你没有在<% 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 %>