我试图将模型逻辑保留在我的模型中,但是我不能让它对自己进行修改,并且使它们保留在数据库中.
在我的控制器:
@article.perform_some_calulcations!
在我的模型中:
def perform_some_calculations! self.foo.gsub!(/regexp/,'string') self.save end
如果我将调试器语句放在我的方法中,并且在控制器中调用它之后,@ article.foo具有正确的值.但是,当我继续,它不会保留在数据库中,而且webrick不会报告任何UPDATE语句.
怎么了?我不知道我以前是否曾经做过这样的事情,但肯定是可能的吗?
解决方法
你的问题是,如果你修改一个属性“就地”,这意味着:没有给它一个新的值,那么Rails会认为没有什么新的可以被保存,所以它“优化”保存.
您的属性的每个写访问器将设置一个标志,所以保存方法将知道它应该检查当前值是否真的不同于从数据库读取的值.
这就是为什么self.foo = self.foo.gsub(/ regexp /,’string’)的工作原理(注意,感叹号在这里是不必要的).
如果您需要修改属性“就地”,例如使用gsub!或更换,使用:
def perform_some_calculations! foo_will_change! self.foo.gsub!(/regexp/,'string') self.save end
原文地址:https://www.jb51.cc/ruby/266937.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。