1

我的主屏幕上有注册表单。如果用户输入无效数据,我会将他重定向到/signin页面。在此页面上,我可以看到填充字段,但错误描述为空。

这是我的UsersController

class UsersController < ApplicationController
  def new
    @user = User.new(params[:user])
  end

  def create
    @user = User.new(params[:user])
    print @user
    if  @user.save

    else
      render 'new'
    end
  end
end

我用来显示错误的方法

module ApplicationHelper

  def errors_for(model, attribute)
    if model.errors[attribute].present?
      content_tag :div, :class => 'well error' do
        content_tag :ul do
          model.errors[attribute].collect {|item| concat(content_tag(:li, item))}

        end
      end
    end
  end
end

我的表格部分:

<%= f.label :user_name %>
<%= f.text_field :user_name, :class=>"input-medium" %>
<%= errors_for(@user, :user_name) %>

<%= f.label :email %>

<%= f.text_field :email, :class=>"input-medium " %>

<%= errors_for(@user, :email) %>

<%= f.label :password %>

<%= f.password_field :password, :class=>"input-medium" %>

<%= f.label :password_confirmation, "Confirmation" %>

<%= f.password_field :password_confirmation, :class=>"input-medium" %>

和我的注册视图:

<section class="centered user-form-container">
  <div class="user-form well pull-left">
    <div class="centered">
      <h1>Sign up</h1>
      <%= form_for(@user, :action=>"create") do |f| %>
          <%= render 'signup', :f=>f %>
          <%= f.submit "Sign up" %>

      <% end %>
    </div>
  </div>

</section>
4

3 回答 3

1

在这种情况下,我相信您需要使用flash.now,如下所示:

根据Rails 文档

默认情况下,将值添加到闪存将使它们可用于下一个请求,但有时您可能希望在同一个请求中访问这些值。例如,如果创建操作未能保存资源并且您直接呈现新模板,则不会导致新请求,但您可能仍希望使用 flash 显示消息。为此,您可以像使用普通 flash 一样使用 flash.now:

def create
  @user = User.new(params[:user])
  print @user
  if  @user.save

  else
    # start with this, then expand the error text
    flash.now[:error] = "Could not save user"
    render 'new'
  end

end
于 2012-05-14T13:20:43.520 回答
1

您将在您的验证方法中执行此操作。

如果您使用的是标准 rails 验证,您可以这样做:

validates_presence_of :foo, :message => 'Message you want to display here'

如果您正在进行自定义验证,那么:

def my_validation_method
  begin
    my_validation_code_here
  rescue
    self.errors[:base] << 'Message you want to display here'
  end
end
于 2012-05-14T14:31:09.757 回答
1
  def new
    @user = User.new(params[:user])
    if (!params[:user].nil?)
      @user.valid?
    end


  end
于 2012-05-15T11:01:27.750 回答