2012-10-17 34 views
3

是否有替代產品update_attribute?我知道你仍然可以在Rails 3中使用它,但是你會得到棄用消息。Rails的update_attribute替換?

我需要使用update_attribute的原因是因爲我需要跳過驗證但運行回調。

我發現這樣做的(和避免過時的消息)的唯一途徑,是通過簡單地從update_attribute提取代碼:

Object.send("#{attribute}=", value) 
Object.save(:validate => false) 

我想知道是否有另一種(正確)這樣做的方式。

謝謝。

+0

運行未驗證的回調的唯一方法是將':validate => false'傳遞給保存調用。 *是正確的方式。如果你不需要驗證或回調,那麼你應該使用'update_column'。如果您想更新大量記錄並跳過驗證並跳過回調,那麼您需要'Model.update_all'。 –

+0

我已經更新了我的答案。我想現在它可以幫助。 – ck3g

回答

3

我會建議什麼答案是沒有

您不能通過falseupdate_attributes跳過驗證。

我會推薦你​​update_column,但這種方法跳過回調。而從你的判斷來看,這不是你所需要的。

更新:

我發現有趣的表that presentation。我想可以證明我的看法。

update_(attribute|column)s

來看由該表僅存在一個滿足條件的方法。

-1

validations documentation:驗證=>假:

上保存該驗證過程可以通過傳遞被跳過。默認情況下,當混合驗證模塊時,常規#save方法將替換爲此方法。

因此,只需將您的屬性設置爲正確的值,並將validates參數設置爲false,即可保存。你也不需要使用send,除非你的代碼依賴於元編程,但在你的例子中這是不明顯的。

object.attribute = value 
object.save(:validate => false) 
+0

我不明白這裏的downvote。儘管跳過驗證可能不是一個好主意(除非驗證是錯誤的*),但這是跳過持久化工作流的這一步驟的有效方法。 *這是一面紅旗,對我來說。驗證是有原因的! –