簡體   English   中英

Rails:如何在我的模型中調用`self.save`並將其保留在數據庫中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM