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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Ruby相关文章