5

有没有办法从自定义成员操作中使用 ActiveAdmin 的表单 dsl?

我想保留 has_many 语义以避免不得不自己从头开始实现它,但我想要一个单独的表单视图。

像这样的东西是理想的:

member_action :subject, method: :get do
  @subject = Subject.find(params[:id])

  form do |f|
    f.inputs do
      f.input :name, :required => true, :input_html => {:class => "large"}      
    end
  end
end
4

2 回答 2

2

Arbre 似乎不支持 formtastic,所以我无法让表单在.arb文件中工作。.erb但是,您可以在文件中使用 formtastic 。因此,虽然它没有为 formtastic 使用 ActiveAdmin 的 DSL 包装器,但语法是相似的:

# app/admin/foo.rb

ActiveAdmin.register Foo do
  member_action :subject, method: [:get, :patch] do
    if request.get?
      render :some_custom_view
    else
      # handle update or whatever else you would like to do on form submit
      # if resource.update(...)
      #   redirect_to ...
      # else
      #   render :some_custom_view
      # end
    end
  end
end

# app/views/admin/foo/some_custom_view.html.erb

<%= semantic_form_for [:admin, resource], url: subject_admin_foo_path(resource) do |f| %>
  <%= f.semantic_errors(*f.object.errors.keys) %>
  <%= f.inputs do %>
    <%= f.input :name %>
  <% end %>
  <%= f.actions %>
<% end %>
于 2018-07-22T20:05:52.327 回答
0

您可以在 .arb 模板中使用 DSL,如http://www.activeadmin.info/docs/8-custom-actions.html#rendering_in_custom_actions中所述

对于内联版本,您可能应该尝试创建 Arbre::Context 并加载正确的助手

于 2014-07-03T13:30:16.903 回答