Hallo Ich habe eine einfache App, die ich erstellen und habe Probleme, die Fehlermeldungen angezeigt werden, wenn jemand ungültige Informationen oder überhaupt keine Informationen in ein Feld eingibt.Formular Fehlermeldung nicht in Rails App generieren
Das Formular, das ich verwende, ist, einen neuen Benutzer zu registrieren, der Code, der dem Benutzer und dem Formular zugeordnet ist, ist unten;
users_controller.rb
Class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
@country = Country.all
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to @user
else
redirect_to '/signup'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
end
user.rb
class User < ApplicationRecord
before_save { self.email = email.downcase }
validates :first_name, presence: true, length: { maximum: 25 }
validates :first_name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
has_many :trips
has_many :countries, through: :trips
end
new.html.erb
<div class="container">
<h1 class="text-center">Sign up</h1>
<div class="row">
<div class="col-md-6 offset-md-3 ">
<%=form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :first_name %>
<%= f.text_field :first_name, class: "form-control" %>
<%= f.label :last_name %>
<%= f.text_field :last_name, class: "form-control" %>
<%= f.label :email %>
<%= f.email_field :email, class: "form-control" %>
<%= f.label :password %>
<%= f.password_field :password, class: "form-control" %>
<%= f.submit "Create an account", class: 'form-control btn btn-primary' %>
<% end %>
</div>
</div>
</div>
_error_messages.html.erb
<% if @user.errors.any? %>
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% else %>
<h3>test</h3>
<% end %>
Wenn ich das Formular lade ich das "Test" string tun sehen, die ich in meinem _error_messages.html.erb für Sichtbarkeit setzen. Wenn ich jedoch Daten auf der Anmeldeseite eintrage, wird die Seite neu geladen (wie es sollte, anstatt sie an die Benutzerseite zu senden, wenn alle Felder gültig sind). Die Zeichenfolge "Test" wird jedoch immer noch oben angezeigt und nicht die Fehlermeldungen, die angezeigt werden sollten.
Meine Annahme ist, ich brauche eine Art von Sitzung oder etwas zu erinnern, was die Fehler waren, wie es jetzt eine komplett neue Seite mit nichts im Speicher neu lädt, aber ich kann die Lösung zu diesem nirgendwo im Moment finden.
Jede Hilfe wäre sehr willkommen!
Versuchen Sie 'redirect_to '/ signup'' zu' render'neuen'' zu ändern – Pavan
Danke @Pavan, das funktioniert hat! Können Sie den Unterschied zwischen den beiden Aussagen erklären? –
Ich habe meine Antwort hinzugefügt und den Unterschied erklärt.Ich hoffe, Sie finden es hilfreich :) – Pavan