Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使错误消息窗体仅在生成实际错误消息时显示_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何使错误消息窗体仅在生成实际错误消息时显示

Ruby on rails 如何使错误消息窗体仅在生成实际错误消息时显示,ruby-on-rails,Ruby On Rails,我正在学习RailsSpace教程。始终显示我的错误表单。它总是开着!我不知道如何让它消失。我知道使用@user.errors.clear实际上会清除消息。我尝试在视图中使用它,但根本不会显示任何错误消息。我感谢你的帮助 以下是错误表单代码: <% if @user.errors.any? %> <div id="errorExplanation"> <h2>Please fix the following <%= pluralize(@user.e

我正在学习RailsSpace教程。始终显示我的错误表单。它总是开着!我不知道如何让它消失。我知道使用@user.errors.clear实际上会清除消息。我尝试在视图中使用它,但根本不会显示任何错误消息。我感谢你的帮助

以下是错误表单代码:

<% if @user.errors.any? %>
<div id="errorExplanation">
  <h2>Please fix the following <%= pluralize(@user.errors.count, "error") %>:</h2>

  <ul>
    <% @user.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
    <% end %>
  </ul>
</div>
<% end %>

请修复以下问题:
这是我的控制器:

class UserController < ApplicationController

  def index
    @title = "NubeMart Hub!"
  end

  def register
   @user = User.new
    @title = "Register"
    if request.post?

      @user = User.create(ad_params)
    end

      if @user.save

        flash[:notice]="User #{@user.screen_name} created!"
        redirect_to :action=>"index"
      end

  end

  def ad_params
    params.require(:user).permit(:screen_name, :email, :password)
  end

end
class UserController“index”
终止
终止
def ad_参数
参数require(:user).permit(:屏幕名称,:电子邮件,:密码)
终止
终止
以下是我的观点:

<h2>Register</h2>

<%= form_for :user do |form| %>

  <%= render "shared/form_errors", :user => @user %>
  <fieldset>
    <legend>Enter Your Details</legend>

    <div class="form_row">
      <label for="screen_name">Screen name:</label>
      <%= form.text_field :screen_name,
                          :size => User::SCREEN_NAME_SIZE,
                          :maxlength => User::SCREEN_NAME_MAX_LENGTH %>
    </div>

    <div class="form_row">
      <label for="email">Email:</label>
      <%= form.text_field :email,
                          :size => User::EMAIL_SIZE,
                          :maxlength => User::EMAIL_MAX_LENGTH %>
    </div>

    <div class="form_row">
      <label for="password">Password:</label>
      <%= form.password_field :password,
                              :size => User::PASSWORD_SIZE,
                              :maxlength => User::PASSWORD_MAX_LENGTH %>
    </div>

    <div class="form_row">
      <%= submit_tag "Register!", :class => "submit" %>
    </div>
  </fieldset>

<% end %>
寄存器
@用户%>
输入您的详细信息
屏幕名称:
用户::屏幕名称大小,
:maxlength=>User::SCREEN\u NAME\u MAX\u LENGTH%>
电邮:
用户::电子邮件大小,
:maxlength=>User::EMAIL\u MAX\u LENGTH%>
密码:
用户::密码大小,
:maxlength=>User::PASSWORD\u MAX\u LENGTH%>
“提交”%>

您的注册方法错误:

def register
  @user = User.new
  @title = "Register"
  if request.post?
    @user = User.create(ad_params)
  end
  if @user.save    # <== This block should be moved!
    flash[:notice]="User #{@user.screen_name} created!"
    redirect_to :action=>"index"
  end
end
def register
  @title = "Register"
  if request.post?
    @user = User.new(ad_params) # I have changed create to new
    if @user.save               # here your user will be saved(inly in case of post request)
      flash[:notice]="User #{@user.screen_name} created!"
    end
  else
    @user = User.new # (this is when request is not post)
  end
  redirect_to :action=>"index"
end