[英]usage of attr_accessor in Rails
什么attr_accessor
在Rails模型中使用attr_reader
/ attr_writer
/ attr_accessor
?
從來沒有,除非你有特殊需要。 為您創建自動數據庫支持的訪問者,因此您無需擔心。
您創建的任何attr_accessor
都將更改rails對象上的相關@attr
,但是當對象被銷毀時,這將丟失,除非您將其粘貼回數據庫中。 有時你確實想要這種行為,但在rails應用程序中這是不尋常的。
現在在紅寶石中,這是一個不同的故事,你最終經常使用它們。 但是如果你需要它們在軌道上我會感到驚訝 - 特別是最初。
attr_accessor可以用於您不希望直接存儲在數據庫中的值,並且只存在於對象的生命周期中(例如密碼)。
attr_reader可以用作執行以下操作的幾種替代方法之一:
def instance_value
"my value"
end
Rails模型只是繼承自ActiveRecord::Base
ruby類。 ActiveRecord使用attr_accessor
來定義引用ruby類表的列名的getter和setter。 重要的是要注意這只是為了堅持; 這些模型仍然只是紅寶石類。
attr_accessor :foo
只是以下的快捷方式:
def foo=(var)
@foo = var
end
def foo
@foo
end
attr_reader :foo
只是以下的快捷方式:
def foo
@foo
end
attr_writer :foo
是以下的快捷方式:
def foo=(var)
@foo = var
end
attr_accessor
是getter和setter的快捷方式,而attr_reader
是getter的快捷方式, attr_writer
只是setter的快捷方式。
在rails中,ActiveRecord以方便的方式使用這些getter和setter來讀取和寫入數據庫的值。 但是,數據庫只是持久層。 您可以像使用任何其他ruby類一樣自由地使用attr_accessor
和attr_reader
來正確attr_reader
業務邏輯。 由於您需要在需要持久保存到數據庫之外獲取和設置對象的屬性,因此請相應地使用attr_
。
更多信息:
http://apidock.com/ruby/Module/attr_accessor
如果您使用它來驗證terms_of_service的接受度,那么您應該考慮使用validates:terms_of_service,:acceptance => true。 它將創建一個虛擬屬性,並且更加簡潔。
http://guides.rubyonrails.org/active_record_validations.html#acceptance 。
一個例子是在一個序列化列中存儲許多選項。 如果您嘗試為這些選項之一設置文本字段,表單構建器會抱怨。 您可以使用attr_accessor偽造它,然后在更新操作中將其保存在序列化列中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.