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
- 页面以任何一种方式呈现。
我有一个自定义页面,它将提取一些数据并将其格式化,以便可以在 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
- 页面以任何一种方式呈现。