ruby 提交表单时Rails不显示错误消息

goucqfw6  于 2023-02-18  发布在  Ruby
关注(0)|答案(2)|浏览(112)

我是rails的新手,所以我有一个Signup控制器,如下所示:

class SignupController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to root_path, notice: "You are logged in as #{@user[:username]}"
    else
      puts @user.errors.full_messages
      render :new
    end
  end

  private
  def user_params
    puts params
    params.require(:user).permit(:email, :password, :password_confirmation, :username)
  end
end

因此,当我提交表单时,我尝试创建一个新用户,而我的routes.rb文件包含以下内容:

Rails.application.routes.draw do
  root to: "home#index"
  get '/about-us', to: "about#index", as: :about

  # signing up
  get 'sign_up', to: "signup#new"
  post 'sign_up', to: "signup#create"

end

我的app/views/signup/new.html.erb文件中包含以下代码:

<h1>Sign Up</h1>
<%= form_with model: @user, url: sign_up_path do |form| %>
    <%= @user.errors.full_messages.inspect %>
    <% if @user.errors.any? %>
     <div class="alert alert-danger">
        <% @user.errors.full_messages.each do |message| %>
            <div><%= message %></div>
        <% end %>
     </div>
    <% end %>
   <div class="mb-3">
        <%= form.label :email, class: "form-label"%>
        <%= form.text_field :email, placeholder: "email@gmail.com", class: "form-control"%>
    </div>
    <div class="mb-3">
        <%= form.label :username, class: "form-label"%>
        <%= form.text_field :username, placeholder: "username", class: "form-control"%>
    </div>
    <div class="mb-3">
        <%= form.label :password, class: "form-label"%>
        <%= form.password_field :password, placeholder: "password", class: "form-control"%>
    <div class="mb-3">
        <%= form.label :password_confirmation, class: "form-label"%>
        <%= form.password_field :password_confirmation, placeholder: "password", class: "form-control"%>
    </div>
    <div class="mb-3">
        <%= form.submit "Sign Up", class: 'btn btn-primary'%>
    </div>
<% end %>

但是,当我提交有错误的表单时,似乎我在控制台中收到了错误消息,但无法在模板中呈现。以下是我收到的错误:

Password can't be blank
Email can't be blank
Email invalid email address
Username can't be blank

我的代码可能有什么问题。

vcirk6k6

vcirk6k61#

在您的表单中,请尝试以下操作

<% if @user.errors.any? %>
     <div class="alert alert-danger">
        <% @user.errors.each do |error| %>
            <div><%= error.full_message %></div>
        <% end %>
     </div>
<% end %>
uz75evzq

uz75evzq2#

我使用的是rails版本7.*,所以我设法通过将SignupController中的create方法更改为:

def create
    @user = User.new(user_params)
    if @user.save
      redirect_to root_path, notice: "You are logged in as #{@user[:username]}"
    else
      puts @user.errors.full_messages
      render :new, status: :unprocessable_entity, content_type: "text/html"
    end
  end

这是根据我在评论中从Alex那里得到的建议,以及我发现here的讨论。

相关问题