我的主屏幕上有注册表格。如果用户输入了无效数据,我会将其重定向到/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>
答案 0 :(得分:1)
在这种情况下,我认为您需要使用flash.now
,如下所示:
根据rails docs:
默认情况下,向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
答案 1 :(得分:1)
您可以在验证方法中执行此操作。
如果您使用的是标准导轨验证,则可以执行以下操作:
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
答案 2 :(得分:1)
def new
@user = User.new(params[:user])
if (!params[:user].nil?)
@user.valid?
end
end