开发者社区> 问答> 正文

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

今天遇到个问题,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 无法保存。 但是这个东西太细微了,我们很容易把它忽略掉

展开
收起
心有灵_夕 2019-12-29 00:34:55 886 0
1 条回答
写回答
取消 提交回答
  • ActiveRecord 5 已经没这个问题了,callback 只有遇到 throws :abort 才能中断了。

    http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html#module-ActiveRecord::Callbacks-label-before_validation-2A+returning+statements

    2019-12-29 00:35:24
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载