【发布时间】:2014-12-15 08:03:16
【问题描述】:
我必须为作为成员操作的自定义操作添加视图,并希望在其上显示关联记录。有没有办法添加自定义视图,而不仅仅是在管理员的视图文件夹中添加 html.erb?
我不想添加或创建 html 文件,而是使用活跃的管理员助手。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin
我必须为作为成员操作的自定义操作添加视图,并希望在其上显示关联记录。有没有办法添加自定义视图,而不仅仅是在管理员的视图文件夹中添加 html.erb?
我不想添加或创建 html 文件,而是使用活跃的管理员助手。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin
成员动作与控制器动作完全不同,这意味着您可以在其中执行相同的操作。
你可以使用这样的想法:
render text: "Hello world!"
或者如果你想要一个复杂的标记:
message1 = "Hello"
@message2 = "world!"
view = Arbre::Context.new(message: message, self) do
h1 do
span message
span @message
end
end
render body: view.to_html # or .to_s
【讨论】:
render text: view.to_s, layout: "layouts/active_admin" 工作
您可以使用以下代码为 rails 4.1 渲染 html:
render html: '<html><body>Some body text</body></html>'.html_safe ## Add html_safe
但是,如果你使用 rails 4.2,那么你可以使用以下:
render text: '<html><body>Some body text</body></html>'
我认为以下answer 对您的问题非常有用。
【讨论】:
最后在 admin/user/messages.html.erb 的 html.erb 文件中添加以下内容
<% view = Arbre::Context.new({messages: @messages, user: @user}, self) do
panel "Sent Messages" do
paginated_collection(messages, download_links: false) do
table_for collection do
column :id
column :content
end
end
end
end
%>
<%= view.to_s %>
【讨论】:
根据您的命名空间(ActiveAdmin 在我的例子中是 /admin),您可以像在应用程序的其余部分中一样创建文件夹 app/views/admin。
例如,如果您有一个资源User 和一个操作apply_discount
ActiveAdmin.register User do
member_action :apply_discount, method: [:get, :put] do
if request.get?
render :apply_discount
else
# TODO ...
end
end
end
您可以将您的 ARBRE 视图文件放入 app/views/admin/users/apply_discount.html.arb -> 注意扩展名是 ARB,而不是 ERB - 尽管 ERB 也应该可以工作 according to the docs
【讨论】: