Rails / ActiveAdmin - 如何将自定义数据从控制器传递到内容

Rails / ActiveAdmin - how to pass custom data from controller into content

我有一个自定义页面,它将提取一些数据并将其格式化,以便可以在 table 中显示。这是一个非常简化的版本:

ActiveAdmin.register_page "My Custom Page" do
  controller do
    @data = [
      { name: "foo"},
      { name: "bar"}
    ]
  end

  content do
    panel "My Panel" do
      table_for @data do
        column("Name") { |row| row[:name] }
      end
    end
  end
end

当我 运行 那个时,我得到一个错误 undefined method '[]' for nil:NilClass 因为传递到块中的变量 row 是 nil。如何正确地将 @data 对象传递给视图?

您可以在视图中加载数据。这样做时,您可以像访问控制器一样访问 params

content do
  data = Entity.find(params[:id]
end

这不是 Rails 方式,但我认为在 ActiveAdmin 中这完全没问题。如果您有更复杂的数据要加载和处理,您可以为其创建服务。

如果你觉得你需要使用控制器,你会这样做:

controller do
  def index 
    # your code
  end
end

有趣的是,您甚至不需要调用 super - 页面以任何一种方式呈现。