检查具有关联的对象

2024-04-03

我有两个模型,其中 A has_many B。如果我加载 A 包括关联的 B:

a = A.find(:first, include: :bs)

a.inspect只显示a的属性:

 => "#<A id: 1, name: \"Test\", created_at: \"2012-07-02 21:50:32\", updated_at: \"2012-07-02 21:50:32\">"

我能怎么做a.inspect这样它就会显示所有关联的a.bs?


默认情况下你不能这样做。它可能会在检查对象时产生太多问题和副作用。不过你可以延长inspect自己有这样的事情:

class A < ActiveRecord::Base
  ...
  def inspect
    [super, bs.inspect].join("\n")
  end
end

请注意,这不是很聪明,因为它会强制加载bs每次你检查一个A实例。所以也许你想变得更聪明,做这样的事情:

def inspect
  [super, bs.loaded? ? bs.inspect : nil].compact.join("\n")
end

这只会检查bs如果它已经预加载(与:include例如)。

或者也许您想创建一个super_inspect相反,一切都会自动完成。你可以延长ActiveRecord::Base类似的东西:

class ActiveRecord::Base
  def deep_inspect
    ([inspect] + self.class.reflect_on_all_associations.map { |a|
      self.send(a.name).inspect
    }).compact.join("\n  ")
  end
end

这将自动查找与reflect_on_all_associations http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflect_on_all_associations,如果关联已加载,它将调用inspect关于这一点。

现在,您可以修改上面的代码,但是您想创建自己的自定义检查,或者如果您愿意,只需扩展当前检查。只需一点点代码,一切皆有可能。

这是一个更智能的更新版本的示例:

class ActiveRecord::Base
  def deep_inspect
    ([inspect] + self.class.reflect_on_all_associations.map { |a|
      out = ""
      assoc = self.send(a.name)
      # Check for collection
      if assoc.is_a?(ActiveRecord::Associations::CollectionProxy)
        # Include name of collection in output
        out += "\n#{assoc.name.pluralize}:\n"
        out += self.send(a.name).to_a.inspect
      else
        out += self.send(a.name).inspect
      end
      out
    }).compact.join("\n  ")
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查具有关联的对象 的相关文章

随机推荐

  • 批处理文件中的 IF ELSE 语法错误?

    我是批处理文件写入的新手 我正在编写一个脚本 该脚本随机打开三个网页之一并在延迟后循环 当我运行它时 我经常遇到语法错误 但我无法确定它在哪里 main echo on set location set A num random 10 if
  • powershell - 列出本地用户及其组

    我想要一份包含所有本地用户及其相关组 用户 高级用户 管理员等 的报告 我通过这种方式获取用户 adsi ADSI WinNT adsi psbase children where psbase schemaClassName match
  • CSS 剪辑动画

    我正在尝试使用 CSS3 过渡来制作 CSS 动画clip没有成功 图像只是剪辑而没有过渡 我缺少什么 clipped position absolute width auto clip rect 100 100 100 100 webki
  • Facebook Connect 发布对话框文本?

    您好 我已经让 Facebook Connect 与功能性登录和注销按钮一起使用 另外 当我按下按钮时 我想发布到 Facebook 我可以做到这一点 有点 你看 我有一个用户事先自定义的指定字符串 它叫做 statusUpdates 我不
  • 如何让现有分支跟踪远程分支?

    我正在尝试使用以下命令跟踪现有分支到远程分支 track or set upstream to 但出现以下错误 git branch track master origin master fatal A branch named maste
  • qml 无框窗户的阴影

    我有无框主窗口 由 qml 创建 ApplicationWindow 在我的 main qml 文件中 我通过以下方式实例化 qmlQQmlApplicationEngine load Qt5 1中引入的类 如果我设置Qt Frameles
  • 深度优先搜索 (DFS) 与广度优先搜索 (BFS) 伪代码和复杂性

    我必须为计算连接数量的算法开发伪代码 给定顶点 V 和边 E 图中的分量 G V E 我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量 但是 我想使用最有效的算法来解决这个问题 但我不确定每个算法的复杂度 下面是用伪代码形式编
  • Xcode 8 Shell 脚本调用错误

    I m trying to fix this issue for hours but it still persists Tried everything on the forums nothing helped I m using Coc
  • C#,使用 zlib 解压缩流

    我正在尝试解压缩字节数组 byte bloc 120 156 211 97 144 76 247 142 98 228 98 0 2 70 101 6 166 8 16 131 133 131 145 129 209 134 129 133
  • shell 解析一行来查找某个标签

    我计划创建一个简单的脚本来根据属性文件中存储的值编辑文件 所以本质上我计划循环遍历原始文件中的每一行 当它遇到一行中的某个标签时 比如 它将获取该标签后面的文本 即证书 然后实现一个函数来解析属性文件获取某些值并将它们添加到原始文件中 例如
  • HTML5 的子集或约束可以完美映射到 XHTML5,反之亦然?

    我需要在 a 中表示内容通用语 也就是说 在当今时代 HTML5标准 我的目标不是在网络浏览器中显示页面 我需要代表仅有内容 没有界面 没有布局 没有逻辑 没有Javascript 正如所记得的其他问题 https stackoverflo
  • 如何枚举所有HID设备? C#

    我需要枚举连接到我的 PC 的所有 HID 设备 我尝试使用这个答案 https stackoverflow com a 3331509 902424 但它枚举了 USBHub 设备 但我在那里找不到我的 HID 设备 EDIT 我很高兴知
  • TCP recvfrom() 不存储“from”

    我正在使用 TCP 制作一个服务器程序 我想获取我刚刚收到的消息发送者的 IP 地址 这是我的代码 case FD READ Incoming data get ready to receive char buffer DEFAULT BU
  • 如何让 jquery 拖动在移动设备上工作?

    我有一个应用程序 允许用户拖动一些图像 它使用jquery 我试图让它在移动设备上工作 在iPhone上 如果我拖动图像 那么它会拖动整个页面 我想使用 jquery 移动 这是正确的方法吗 如果是这样 从常规 jquery 过渡到 jqu
  • 使用查询结果作为表名

    如果我们有如下表 A Table 如何执行涉及以下值的查询A table作为表名 我的意思是这样的 SELECT Table as tbl FROM A SELECT FROM tbl 但在一份声明中 SQLite没有内置的动态构造SQL语
  • Gephi 中的平行边是什么?导入边列表时如何处理它们?

    当我导入 gexf 文件时 它会标记一堆平行边 我不知道什么是平行边以及为什么我的图表存在问题 我正在尝试创建一个动态 gephi 图 如果一对两个节点之间有多条边 这些边彼此平行 因此它们是平行边 Gephi 中无法表示平行边 因此 Ge
  • Github 错误:找不到存储库(是的,还有另一个)

    我在这里搜索并阅读了大多数类似的问题 但似乎没有一个与我的相同 我在 Github 上有一个私人仓库 一个小时前我可以很好地推送 现在 我收到错误 未找到存储库消息 我的 ssh config 中有以下内容 Host github Host
  • GitHub:我为什么要分叉?

    我知道分叉是在服务器端克隆存储库 但我不明白为什么我要这么做 为什么不将原始存储库克隆到我的计算机 添加我的代码 而不是将新分支推送到 GitHub 并发出拉取请求 我知道分叉是在服务器端克隆存储库 差不多是这样吧 在 GitHub 上 分
  • JQuery 将变量从 href 传递到 load()

    我试图在 JQuery 中将 href id 传递给 load 我可以从警报中看到返回的 id 960 所以我知道 id 值已经过去了 我只是不知道如何附加加载 url refreshme add id 是重要的部分 我用它来刷新数据库拉取
  • 检查具有关联的对象

    我有两个模型 其中 A has many B 如果我加载 A 包括关联的 B a A find first include bs a inspect只显示a的属性 gt a 我能怎么做a inspect这样它就会显示所有关联的a bs 默认