为什么在执行record.inspect时不会输出attr_accessor虚拟属性

时间:2011-10-25 04:17:00

标签: ruby-on-rails ruby-on-rails-3

在我的ListItem rails模型中,我有:

attr_accessor :catalyst_action, :actor_user_id, :actor_full_name

我能够在控制器中设置这些变量,并且我确认当记录到达观察者时它们仍在那里。

控制器

  @list_item.actor_user_id = current_user.id
  @list_item.actor_full_name = current_user.full_name
  @list_item.save

观察

  Rails.logger.info '@list_item.inspect - ListItemObserver'
  Rails.logger.info record.inspect
  Rails.logger.info record.actor_user_id
  Rails.logger.info record.actor_full_name
  Rails.logger.info '@list_item.inspect - ListItemObserver'

这些输出很好,但是当我执行record.inspect时,虚拟attr没有被输出,但如果我专门记录它们就会出现并输出。为什么输出记录不包括vattr?如何获取记录以包含这些变量?

由于

1 个答案:

答案 0 :(得分:4)

它们是虚拟属性,而不是真实属性。 Active Record提供inspect方法(definition is here),它遍历模型的所有列,显然不包含虚拟属性。

如果您想了解模型上的虚拟属性,那么就没有简单的方法可以做到这一点。您必须将它们分配到某个列表中,然后从该列表中读取。