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

huacnlee · November 22, 2011 · Last by ibachue replied at August 16, 2016 · 7218 hits

今天遇到个问题,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 都对返回值小心翼翼

You need to Sign in before reply, if you don't have an account, please Sign up first.