我在使用ActiveAdmin将正确的信息提取到仪表板列时遇到问题。如果有人能帮助我解决这个问题,我将不胜感激。
我遇到的问题是使用我正在显示的当前记录保留关联类的数据(下面的第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
并返回我正在寻找的正确值。但是,ActiveAdmin不喜欢这个以及以下undefined method circuit for nil:NilClass
的页面错误。尝试清理代码,我写了一个root_house
方法。
def root_house
meters.pop.circuit.root
end
ActiveAdmin让我有点困惑,非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
这是一个肮脏的解决方案,重构如你所愿:
def root_house
if meters && meters.pop && meters.pop.circuit
meters.pop.circuit.root
else
'object is not present'
end
end
所以如果meters.pop.circuit.root
和meters
和meters.pop
不是零,我只会打电话给meters.pop.ciruit
。
Google null对象模式和Demeter ruby法则为更清晰的解决方案,也可以使用delegate
方法,this可能会有所帮助。