ruby-on-rails – Rails:我如何在我的模型中调用`self.save`,并将它保存在数据库中?

我试图将模型逻辑保留在我的模型中,但是我不能让它对自己进行修改,并且使它们保留在数据库中.

在我的控制器:

@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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...