ActiveAdmin 仪表板中的格式问题

Formatting issue in ActiveAdmin dashboard

我在使用 ActiveAdmin 将正确信息提取到仪表板列时遇到问题。如果有人能帮我解决这个问题,我将不胜感激。

我遇到的问题是保留来自与我正在显示的当前记录相关的 class 的数据(下面的第 6 行)。

这是我创建的专栏:

  column do
    panel "Recent Beacons" do
      table_for Beacon.limit(20) do
        column("Mac address") { |b| link_to b.mac_address, admin_beacon_path(b) }
        column "Last seen", :updated_at
        column("House") { |b| link_to b.root_house, admin_house_path(b.root_house.id) }
        column("Status") { |b| b.online? ? status_tag('Online', :green) : status_tag('Offline', :red) }
      end
    end
  end

使用 binding.pry 我能够执行 b.meters.pop.circuit.root 和 return 我正在寻找的正确值。然而,ActiveAdmin 不喜欢这样,页面错误如下 undefined method circuit for nil:NilClass。为了稍微清理一下代码,我写了一个 root_house 方法。

  def root_house
    meters.pop.circuit.root
  end

ActiveAdmin 让我有点困惑,非常感谢任何帮助。

谢谢!

这里有一个肮脏的修复,如你所愿重构:

  def root_house
    if meters && meters.pop && meters.pop.circuit
      meters.pop.circuit.root
    else
    'object is not present'
    end
  end

所以我只会在 metersmeters.pop 并且 meters.pop.ciruit 不为零时调用 meters.pop.circuit.root

Google null object pattern and law of Demeter ruby 更清晰的解决方案,您也可以使用 delegate 方法,this 可能会有帮助。