簡體   English   中英

在Rails中使用attr_accessor

[英]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_accessorgetter和setter的快捷方式,而attr_readergetter的快捷方式, attr_writer只是setter的快捷方式。

在rails中,ActiveRecord以方便的方式使用這些getter和setter來讀取和寫入數據庫的值。 但是,數據庫只是持久層。 您可以像使用任何其他ruby類一樣自由地使用attr_accessorattr_reader來正確attr_reader業務邏輯。 由於您需要在需要持久保存到數據庫之外獲取和設置對象的屬性,因此請相應地使用attr_

更多信息:

http://apidock.com/ruby/Module/attr_accessor

http://www.rubyist.net/~slagell/ruby/accessors.html

什么是Ruby中的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.

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