簡體   English   中英

Rails 4:在保存之前更改模型中的數據

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

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