[英]how to store temporary attributes on an Active Record model
我想在對象上存儲一些調試消息,因為它可以進行處理,但是我不想將其存儲到數據庫中。 像這樣的合理方法嗎,將實例變量包裝在具有nil防護的方法中? 還是有更好的方法/模式?
class Bid < ApplicationRecord
...
def debug_reasons
@debug_reasons ||= []
end
...
接着
bid.debug_reasons << "here is a reason"
您正在尋找的是attribute
class Bid < ApplicationRecord
attribute :debug_reasons, :default => []
end
有關attribute
詳細信息http://api.rubyonrails.org/v5.0/classes/ActiveRecord/Attributes/ClassMethods.html#method-i-attribute
出於調試目的,我將使用具有適當日志級別的日志記錄。 這樣,對象行為就不會與調試搞混了。
另外,可以(應該)在生產環境中禁用調試日志級別,但是在模型內部添加邏輯將使其變得不那么容易。
您可以使用本示例中的虛擬屬性
我同意Bustikiller的觀點,出於調試目的,記錄消息是比更改生產代碼更好的選擇。
但是,如果您確實需要它,我將使用ruby attr_accessor
方法而不是ActiveRecord :: Base.attribute方法,因為前者不會將內部屬性公開為模型屬性。
模型屬性應該是您的模型實現的實體的屬性。 調試/內部方法(例如#object_id和#to_s)不應視為屬性,因此,它們不應出現在屬性列表中(即,在模型實例上調用#attributes
時)。 通過使用ActiveRecord的.attribute
,您可以將debug_messages
定義為Bid
的屬性,我認為這可能不是您的Bid域的屬性。
因此,使用attr_accessor
不會污染具有內部/邏輯屬性的ActiveModel API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.