我偶爾會看到模型代碼中的屬性訪問器/讀者/作者。如果我想能夠從視圖/控制器代碼更新屬性,這些是必需的嗎?爲什麼在Rails中需要attr_accessor?
我是初學者,所以我真的在談論基本的應用程序。
我偶爾會看到模型代碼中的屬性訪問器/讀者/作者。如果我想能夠從視圖/控制器代碼更新屬性,這些是必需的嗎?爲什麼在Rails中需要attr_accessor?
我是初學者,所以我真的在談論基本的應用程序。
attr_accessor
是Ruby的一個核心功能,用於使用getter和setter方法生成實例變量。在基本的Ruby中它的使用從不需要(這很方便)。
對於ActiveRecord模型,ActiveRecord已經爲您的數據列生成了getters和setter。不需要或不需要attr_accessor
。
如果您有額外的實例數據,您不需要堅持(即它不是數據庫列),那麼您可以使用attr_accessor
爲自己節省幾行代碼。
類似命名的attr_accessible
- 這在Rails代碼中經常出現,並且與attr_accessor
混淆 - 是一種控制ActiveRecord模型中批量分配的棄用方法。 Rails 4不支持開箱。它已被強參數替代,這可以實現更細粒度的控制。
如果聲明attr_accessor
,那麼您可以將其用作virtual attribute
,它基本上是模型上的一個屬性,它不會持久保存到數據庫。
示例:您在User
模型中聲明attr_accessor :password
,以便您可以將其用作新用戶表單中的字段。當您在相應的create
操作中收到其密碼時,可以派生hashed_password
,將其保留到數據庫,並丟棄給定的password
(該操作在請求結束時自動完成)。
通常,對於不是SQL表中實際列的模型上的任何內容,裝飾attr_accessor
是一個不錯的主意。 Rails 4或沒有。這讓您清楚瞭解模型中的內容以及持續的內容。