Rails не показывает сообщения об ошибках валидации - PullRequest
1 голос
/ 04 августа 2010

Привет, ребята, я новичок в рельсах и просто делаю свою первую регистрационную форму. У меня есть некоторые проверки, которые я хочу проверить с помощью rails, но по какой-то причине они не показывают сообщения об ошибках.

На views / user / signup.html.erb у меня есть это

<h1>Register Now!</h1>
<% form_for :user, @u, :url => { :action => "signup" } do |f| %>
    <%= f.error_messages :header_message => "Please Try Again!", :message => "We had some problems processing your registration" %>
    <%= f.label(:first, "First Name")%>
    <%= f.text_field(:first) %><br/>
    <%= f.label(:last, "Last Name")%>
    <%= f.text_field(:last) %><br/>
    <%= f.label(:username, "Username")%>
    <%= f.text_field(:username) %><br/>
    <%= f.label(:password, "Password")%>
    <%= f.password_field(:password) %><br/>
    <%= f.label(:password_confirmation, "Confirm Password")%>
    <%= f.password_field(:password_confirmation) %><br/>
    <%= f.label(:email, "E-mail")%>
    <%= f.text_field(:email) %> <br/>
    <%= f.label(:terms_of_service, "I agree to the terms of service") %>
    <%= f.check_box(:terms_of_service) %><br/>
    <%= f.submit("Sign Up")%>
<% end %>

На модели у меня следующее

class User < ActiveRecord::Base
  validates_length_of :username, :within =>4..15
  validates_length_of :password, :within => 3..520
  validates_presence_of :first, :last, :username, :email, :password, :password_confirmation
  validates_uniqueness_of :username, :email
  validates_confirmation_of :password
  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => "Invalid email"   
  validates_acceptance_of :terms_of_service, :message => "You must agree to our Terms of Service in order to create account"  
end

Контроллер

class UserController < ApplicationController
  def index
    @users = User.find(:all)
  end

  def signup
    if !params[:commit]
      render :action =>'signup'
    else
      @u = User.new
      @u.first = params[:first]
      @u.last = params[:last]
      @u.email = params[:email]
      @u.username = params[:username]
      @u.password = params[:password]
      @u.password_confirmation = params[:password_confirmation]
      @u.terms_of_service = params[:terms_of_service]
      if @u.valid?
        @u.password = Digest::SHA512.hexdigest(params[:password])
        @u.password_confirmation = Digest::SHA512.hexdigest(params[:password_confirmation])
        @u.save!
        render :action => 'success'
      else
        render :action => 'signup'
      end
    end
  end
end

Редактировать: я по какой-то причине обновил свой код, теперь не могу создать пользователя. это даст мне ошибки. Кто-нибудь знает, как это обойти?

Ответы [ 3 ]

31 голосов
/ 04 августа 2010

Возможно, проблема в том, что вы используете redirect вместо render в вашем контроллере.

Сообщения об ошибках не сохраняются при перенаправлении (при перенаправлении ваш браузер немедленно запрашивает новую страницу).

Если вы используете render, сообщения не будут потеряны.

7 голосов
/ 04 августа 2010

Предполагая, что вы назвали соответствующего пользователя как @user в контроллере, измените форму на

<% form_for :user, @user, :url => { :action => "signup" } do |f| %>

Это также может сработать

<% form_for @user, :url => { :action => "signup" } do |f| %>

Затем в форме измените соответственно:

<%= f.label(:first, "First Name")%>
<%= f.text_field :first %>

Так что добавьте ф. и удалите _tag на каждом.

И часть сообщения об ошибке:

<%= f.error_messages :header => "Please complete all the fields", :message => "There is a problem with one or more fields" %>

Не уверен, как работают заголовок: и заголовок: в этом последнем сообщении, но я надеюсь, что вы поняли идею.

ОБНОВЛЕНО теги формы, потому что в них была ошибка.

0 голосов
/ 05 августа 2010

Еще одной проблемой может быть использование rails 3, которая убрала error_messages в отдельный плагин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...