在我的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?如何获取记录以包含这些变量?
由于
答案 0 :(得分:4)
它们是虚拟属性,而不是真实属性。 Active Record提供inspect
方法(definition is here),它遍历模型的所有列,显然不包含虚拟属性。
如果您想了解模型上的虚拟属性,那么就没有简单的方法可以做到这一点。您必须将它们分配到某个列表中,然后从该列表中读取。