如何在 Active Record 模型上存储临时属性

tim*_*one 4 ruby ruby-on-rails

我想在对象上存储一些调试消息,因为它可以进行处理,但我不想将其存储到数据库中。这样的事情是否是一种合理的方式,将实例变量包装在具有 nil 保护的方法中?或者有更好的方法/模式吗?

class Bid < ApplicationRecord
  ...
  def debug_reasons
     @debug_reasons ||= []
  end
  ...
Run Code Online (Sandbox Code Playgroud)

进而

bid.debug_reasons << "here is a reason"
Run Code Online (Sandbox Code Playgroud)

Jos*_*ody 8

你要找的是 attribute

class Bid < ApplicationRecord
  attribute :debug_reasons, :default => []
end
Run Code Online (Sandbox Code Playgroud)

有关http://api.rubyonrails.org/v5.0/classes/ActiveRecord/Attributes/ClassMethods.html#method-i-attribute 的更多信息attribute