nfm*_*nfm 12 activerecord persistence ruby-on-rails
我正在尝试将模型逻辑保留在我的模型中,但是我无法让它对自身执行修改并让它们在数据库中保留.
在我的控制器中:
@article.perform_some_calulcations!
Run Code Online (Sandbox Code Playgroud)
在我的模型中:
def perform_some_calculations!
self.foo.gsub!(/regexp/, 'string')
self.save
end
Run Code Online (Sandbox Code Playgroud)
如果我将debugger语句删除到我的方法中并在控制器中调用它之后,则@article.foo具有正确的值.但是,当我继续时,它不会在数据库中保留,webrick不会报告任何UPDATE语句.
出了什么问题?我不知道我以前是否曾经这样做过,但肯定有可能吗?
Ars*_*en7 18
你的问题是如果你"修改"一个属性,这意味着:如果不给它赋一个新的值,那么Rails会认为没有什么新东西可以保存,所以它"优化"了豁免.
属性的每个写访问器都将设置一个标志,因此save方法将知道它应该检查当前值是否确实与从数据库中读取的值不同.这就是为什么self.foo = self.foo.gsub(/regexp/, 'string')有效(注意这里不需要感叹号).
如果您需要"就地"修改属性,例如使用gsub!或replace,请使用:
def perform_some_calculations!
foo_will_change!
self.foo.gsub!(/regexp/, 'string')
self.save
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11867 次 |
| 最近记录: |