Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在活动记录模型上存储临时属性_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在活动记录模型上存储临时属性

Ruby on rails 如何在活动记录模型上存储临时属性,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在对象上存储一些调试消息,因为它可以进行处理,但我不想将其存储到数据库中。这样的方式合理吗,一个实例变量包装在一个具有nil保护的方法中?还是有更好的方式/模式 class Bid < ApplicationRecord ... def debug_reasons @debug_reasons ||= [] end ... class-Bid

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

class Bid < ApplicationRecord
  ...
  def debug_reasons
     @debug_reasons ||= []
  end
  ...
class-Bid
然后

bid.debug_reasons << "here is a reason"

bid.debug\u原因出于调试目的,我将使用具有适当日志级别的日志记录。这样,对象行为就不会在调试过程中出错


此外,在生产环境中可以(应该)禁用调试日志级别,但在模型中添加逻辑并不会使其变得如此简单。

您要查找的是
属性

class Bid < ApplicationRecord
  attribute :debug_reasons, :default => []
end
class-Bid[]
结束
关于
属性的更多信息

我同意,出于调试目的,记录消息比更改生产代码更好

但是,如果您真的需要它,我会使用ruby
attr\u accessor
方法而不是方法,因为前者不会将内部属性作为模型属性公开

模型属性应该是模型实现的实体的属性。调试/内部方法(如#object_id和#to_s)不应被视为属性,因此,它们不应出现在属性列表中(即在模型实例上调用
#attributes
时)。通过使用ActiveRecord中的
.attribute
,您可以将
debug_messages
定义为
Bid
的属性,我认为这可能不是您的Bid域的属性


因此,使用
attr\u访问器
不会污染具有内部/逻辑属性的ActiveModelAPI。

当然,这似乎很好。根据文档,似乎与数据库列相关使用了
属性
。我读错了吗?@jvillian它在模型中也起作用
属性:my_int_array,:integer,array:true
检查该部分哦哇。我很抱歉。它就在那里白纸黑字地说:“属性不需要由数据库列支持。”抱歉。很好的解决方案-不熟悉此功能。将在将来使用。这就是为什么我会问很多关于SO.thx的问题——这个问题可能没有措辞。这就是为什么销售经理认为价值是某种方式(即不存在)的“调试”。