ruby-on-rails - 为什么在执行 record.inspect 时没有输出 attr_accessor 虚拟属性

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

在我的 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/

相关文章:

css - rails 应用程序 : pipeline asset not working as expected

ruby-on-rails - 阻止 Rails 尝试提供模板/ActionView::MissingTemplate

ruby-on-rails - 如何使用 RSpec 测试 Sidekiq worker?

ruby-on-rails-3 - capistrano 3不知道如何构建任务 'deploy:updated'

ruby-on-rails - 当前用户的 Rails 范围查找

ruby-on-rails - 在 CoffeeScript 中访问 Rails 变量

ruby-on-rails - 从脚手架调用自定义 erb 生成器

ruby-on-rails-3 - 我如何在单个 Rails 查询中映射两列

ruby-on-rails - 使用 Devise 和 token_authenticable : "401 unauthorized" 登录 Rails 应用程序

ruby - rake 数据库 :migrate is throwing BusyException: database is locked exception