ruby-on-rails – 在ActiveRecord中如何在before_save回调中使用
我想将我的摘要字段设置为正文字段的清理版本,但前提是用户不提供自己的摘要,即. params [:document] [:summary]是空白的.
如果我创建一个新记录,如果我输入一个保存的摘要,如果我没有使用正文来生成摘要,这似乎工作正常. 但是,当我更新记录时,摘要总是被覆盖.从我的日志文件中我可以看到’generate_summary’被调用两次,第二次’changes’hash为空. class Document << ActiveRecord::Base # Callbacks before_save :generate_summary private def generate_summary @counter ||= 1 logger.debug '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$' logger.debug @counter.to_s logger.debug 'changes: ' + self.changes.inspect self.summary = Sanitize.clean(self.body).to(255) if self.body && (!self.summary_changed? or self.summary.blank?) @counter = @counter + 1 end 登录更新: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 1 更改:{“summary”=> [“asdasdasdasd”,“three.co.uk”]} 页面更新(0.7ms)更新文件SET meta_description =’three.co.uk’,summary =’three.co.uk’,updated_at =’2009-09-30 11:37:08’WHERE id = 77 SQL(0.6ms)COMMIT SQL(0.1ms)BEGIN $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2 变化: {} 页面更新(0.5ms)UPDATE文件设置meta_description =’asdasdasdasd’,summary =’asdasdasdasd’,updated_at =’2009-09-30 11:37:08’WHERE id = 77 解决方法
如@nasmorn所说,你的控制器可能会节省两倍.在更新摘要之前,您还可以检查您的身体是否已更改.
if self.body_changed? && (!self.summary_changed? or self.summary.blank?) self.summary = Sanitize.clean(self.body).to(255) end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |