在我的 ListItem Rails 模型中,我有:
attr_accessor :catalyst_action, :actor_user_id, :actor_full_name
我能够在 Controller 中设置这些变量,并且我确认当记录到达观察者时它们仍然存在。
Controller
@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 时,虚拟属性不会被输出,但是如果我专门记录它们,它们就会在那里并输出。为什么输出记录不包含 vattr?我怎样才能获得包含这些变量的记录?
谢谢
最佳答案
它们是虚拟属性,而不是真实属性。 Active Record 提供了 inspect
方法 ( definition is here ),它会迭代模型的所有列,这些列显然不包含虚拟属性。
如果您想找出模型上的虚拟属性,那么没有简单的方法可以做到这一点。您必须将它们分配到某个列表中,然后从该列表中读取。
关于ruby-on-rails - 为什么在执行 record.inspect 时没有输出 attr_accessor 虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884650/