我似乎在处理错误消息时遇到了问题。这是我的方法:
def destroy
@user = User.find(current_user)
@authorization = Authorization.find(params[:id])
if @user.authorizations.count > 1
@authorization.destroy
redirect_to(user_path(current_user))
else
...
end
end
我不希望用户删除他们的上一次授权(比如Facebook),因为这样用户就没有任何与之相关的授权,账户就会丢失。我想发送一条错误消息,说明destroy方法失败的原因,但我不确定如何失败。我所尝试的一切都不起作用。
我尝试过@user.errors.add=>"错误消息"
但它只是一片空白。我认为我的问题在于使用渲染。如果我尝试,例如:
respond_to do |format|
@user.errors[:base] << "Sorry, you can't delete your only authorized service."
format.html render :template => "users/show"
end
我遇到了一个问题,因为出于某种原因,rails开始在authorization目录内的users/show中查找部分,可能是因为我从users视图调用authorization控制器。
以下是我如何在视图中显示闪光灯:
def show_flash
[:notice, :errors, :alert].collect do |key|
msg = (flash[key].to_s + " (close)")
content_tag(:div, (content_tag(:a, msg, :class => "#{key}", :href => "#", :onclick => "$('messages').slideUp(); return false;")), :id => key, :class => "flash_#{key}") unless flash[key].blank?
end.join
end
我可以得到通知,让它看起来很好。
所以,这似乎是有效的:
respond_to do |format|
format.html {redirect_to(@user, :alert => "Sorry, you can't delete your only authorized service.")}
end
但是,这不是:
respond_to do |format|
format.html {redirect_to(@user, :errors => "Sorry, you can't delete your only authorized service.")}
end