Rails 警惕 Ruby 函数最后行默认作为返回值的陷阱

huacnlee · 2011年11月22日 · 最后由 ibachue 回复于 2016年08月16日 · 7033 次阅读

今天遇到个问题,Rails 项目一个表单无法提交,但是却没有任何错误信息...这个问题折腾了我几个小时...大爷的

最后我发现问题在于我的 Model 里面有个 before_save ,代码是这样的

class Post
  include Mongoid::Document
  field :title
  field :end_on, :type => DateTime
  field :closed, :type => Boolean

  before_save :check_cloose_status
  def check_cloose_status
    self.closed = (Time.now > self.end_on)
  end
end

这个代码看起来没什么问题... 注意最后行,check_cloose_status 会把 self.closed 的值作为返回值 return,如果 self.closed 是 false,那带来的问题就是 Model 无法保存。 但是这个东西太细微了,我们很容易把它忽略掉

哦……我都没留意

以前遇到过这问题,现在还有阴影.. 每次写 callback 都想加一个 return true 在最后一行....

虽然脑海中 知道最后 return 出来的是啥, 能再 method 最后 1 行 把 return value 打印出来么? 我没有找到这个方法.

很老的坑了 每次写这样的 callback 都对返回值小心翼翼

需要 登录 后方可回复, 如果你还没有账号请 注册新账号