[英]Rails: How do I call `self.save` in my model and have it persist in the database?
我正在嘗試將模型邏輯保留在我的模型中,但是我無法讓它對自身執行修改並讓它們在數據庫中保留。
在我的控制器中:
@article.perform_some_calulcations!
在我的模型中:
def perform_some_calculations!
self.foo.gsub!(/regexp/, 'string')
self.save
end
如果我將debugger
語句放入我的方法中並在控制器中調用它之后, @article.foo
具有正確的值。 但是,當我繼續時,它不會在數據庫中持久存在,並且webrick不會報告任何UPDATE
語句。
出了什么問題? 我不知道我以前是否曾經這樣做過,但肯定有可能嗎?
你的問題是如果你“修改”一個屬性,這意味着:如果不給它賦一個新的值,那么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
您的屬性可能受到保護。 檢查你的日志。 如果是這樣的話
self.save!
要么
self.save(false)
嘗試從你的定義中刪除感嘆號。
self.foo = self.foo.gsub!(/regexp/, 'string')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.