[英]Rails 4: Changing data in model before saving
我剛剛閱讀了以下兩個問題的答案:如何更改將要保存的對象的參數(在模型中)?
1)
class User < ActiveRecord::Base
def username=(val)
write_attribute(:username, val.downcase)
end
end
2)
before_save do
self.username = self.username.downcase
end
誰能因各種原因評估一種解決方案是否比另一種“更好”? 還是可以將它們視為“相同”?
感謝大伙們!
區別在於,在選項(1)中,用戶名屬性一經分配便立即變為小寫,而在選項(2)中,直到保存記錄后才轉換。 因此,如果用戶名的值影響保存之前發生的其他步驟,則選項(1)可能更可取。
另外,我發現選項(1)在可讀性/可維護性方面更好,因為很明顯代碼直接與用戶名的分配有關。 在選項(2)中,這有點隱含。
旁注:您可能應該檢查nil,因為如果為用戶名分配了nil值,則上面的代碼將導致錯誤(由於在nil上調用了downcase
):
class User < ActiveRecord::Base
def username=(val)
val = val.downcase unless val.nil?
write_attribute(:username, val)
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.