`
机器人
  • 浏览: 83279 次
  • 性别: Icon_minigender_2
  • 来自: Google
社区版块
存档分类
最新评论

flash[:error]不是个好东西

阅读更多
在rails中对于控制层和业务层的交互,我一般是这样做的
在model中
class Order
  def pay!(op)
    raise "交易单已支付!" if self.paid?
    # 根据业务需要,其它的可能抛出异常的代码...
    self.op = op.name
    self.status = PAID
    self.save!
   end
end

而在控制器中
class OrderController
   def pay
     #一些代码
     begin
       @order = Order.pay!(current_admin)
      rescue => error
       flash[:error] = error
       redirect_to "某个页面" and return
      end
      flash[:notice] = "操作成功"
      redirect_to "某个页面"
   end
end


最近服务器经常遇到500的错误,查看日志,原来是cookei溢出。flash的本质cookie大小引起的,我就不明白cookie居然容不下业务层的异常信息。

蛋真痛。

难道要我在跳转的url上附加业务异常信息?
tip?message=....

大家有什么见解?

原因已经找到,见我的回复
分享到:
评论
12 楼 Hooopo 2009-11-02  
不要拿表多来吓唬偶。。。 。。
即使你不在validation做也可以用model的error,不要用这么丑陋的raise + flash..

class Order
  def pay!(op)
   self.errors.add(:pay, "交易已支付!") if self.paid?
    #raise "交易单已支付!" if self.paid?
    # 根据业务需要,其它的可能抛出异常的代码...
    self.op = op.name
    self.status = PAID
    self.save!
   end
end


class OrderController
   def pay
     #一些代码
    if @order = Order.pay!(current_admin)
     flash[:notice] = "ok"
     redirect_to "xxxooo"
    else
     render "表单"#在页面里用@order.errors[:pay]显示错误
    end
     
end

11 楼 night_stalker 2009-11-02  
貌似他现在用不着区分…… 等到要区分的时候再自定个异常类好了……
10 楼 Hooopo 2009-11-02  
raise抛的不是异常啊?save!出错不抛异常啊?

那请问你如何区分真正的异常和你人为抛的异常?或者你系统的真正异常你都不处理了?
9 楼 机器人 2009-11-02  
Hooopo 写道
你都begin rescue还不异常啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Hooopo 写道
偶明白了。。你是用抛异常来做rails的validation的事情。。这样很好玩吗?


1.你看见了begin rescue就叫它异常啊?

2.你不明白了,我一个业务操作涉及到到5张表以上的都有。这不是什么validation可以搞定的。那像你天天CRUD。现实中对一个业务操作有多各可能情况,我要判断的。
8 楼 Hooopo 2009-11-02  
然后你再大喊一声“我抛的不是异常!!是寂寞...”
7 楼 Hooopo 2009-11-02  
偶明白了。。你是用抛异常来做rails的validation的事情。。这样很好玩吗?
6 楼 Hooopo 2009-11-02  
你都begin rescue还不异常啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
5 楼 night_stalker 2009-11-02  
>_<,慢了
4 楼 night_stalker 2009-11-02  
error 不是字符串,不清楚会出什么事情……
不知道改成
flash[:error] = error.message

能否解决问题
3 楼 机器人 2009-11-02  
Hooopo 写道
异常页面都是统一500页面。。然后后台做log管理系统。。你没必要给用户看异常信息吧。

no,那不叫异常信息,那叫信息提示,是属于正常范围内的提示信息。

原因已经找出来了。

我就不相信"交易单已支付!"几个字会超去cookie的4kb

我找啊找啊,我将flash[:error] = error改为flash[:error] = error.to_s
而logger.info error是可以的,是显示字符串的,我想logger.info error是会给error执行to_s类似的方法。
error本身是一个异常对象,包括栈调用信息等,是一坨很大的信息,cookie装不下的。

嘿嘿,ruby中小小的地方都要注意,一不小心就会死得很难看。
2 楼 Hooopo 2009-11-02  
异常页面都是统一500页面。。然后后台做log管理系统。。你没必要给用户看异常信息吧。
1 楼 Hooopo 2009-11-02  
异常不log的?

相关推荐

Global site tag (gtag.js) - Google Analytics