我是Ruby on Rails的新手,也是这个站点的新手。我试图在控制器上获取我在模型上设置的验证中的错误,以便根据是否发生此错误来更改闪存消息。
我有这个验证:
class User < ActiveRecord::Base
attr_accessible :login, :password
validates_presence_of :login , :message => 'Login can't be empty'
validates_presence_of :password ,:message => 'Password can't be empty'
我的控制器中有以下代码:
def create
login = params[:username].downcase
password = params[:password]
tuser=User.new(login: login, password: password).save
if(tuser.errors.any?)
flash[:title]='¡Error!'
flash[:notice]='Please verify your data'
else
flash[:title]='¡Success!'
flash[:notice]='Your account was created'
end
我在html上使用了以下Flash对象来呈现引导程序模式:
<% if flash[:notice] %>
<div class="modal hide fade" id="modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">× </button>
<h3><%= flash[:title] %></h3>
</div>
<div class="modal-body">
<%= flash[:notice] %>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
该问题发生在控制器中,并且出现此错误:
NoMethodError in UserController#create
undefined method `errors' for false:FalseClass
我想将我的flash [notice]错误消息更改为验证所引发的错误消息,但是我不能这样做。我遵循了一些教程,但是它们使用.html文件上的@tuser全局变量来获取验证错误消息,我需要在contoller上进行处理。谁能帮我?
谢谢
调用保存时,它将验证并返回True
保存是否成功,否则返回False
tuser为True
或False
调用保存的时间。如果Save为false,则会生成错误并可以访问错误,因此无需检查它们。尝试这个:
def create
login = params[:username].downcase
password = params[:password]
@tuser=User.new(login: login, password: password)
#you could also use @tuser = User.new(params[:user]) but you will have to rename :username to :login
if tuser.save
flash[:title]='¡Success!'
flash[:notice]='Your account was created'
#redirect_to user_path(@tuser)
else
flash[:title]='¡Error!'
flash[:notice]='Please verify your data'
#render 'new'
end
end
您可能还应该将重定向或渲染添加到上面注释掉的代码中,因为我不知道您从何处调用它。
编辑另外,将小写字母添加到模型中将与Rails更加内联,例如
before_save {|user| user.login = login.downcase}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句