45

我正在使用 Active Admin 为某些模型提供管理员。我需要为其中一个提供自定义的新表单,但将编辑表单保留为 Active Admin 提供的默认表单。这就是我所拥有的。它的工作原理是它给了我想要的新表单,但编辑表单也在使用新表单,这不是我想要的:

ActiveAdmin.register Document do
  form :partial => 'form'
end

我已经尝试过了,但它给出了一个错误,即“新”是一个未定义的方法:

ActiveAdmin.register Document do
  new do
    form :partial => 'form'
  end
end
4

5 回答 5

98

如果您只想在新表单上隐藏或显示某些字段(例如,您在模型中使用 before_create 自动生成的字段),您可以这样做:

form do |f|
    f.inputs "Member Details" do
        f.input :first_name
        f.input :last_name
        f.input :email
        if !f.object.new_record?
            f.input :password
            f.input :password_confirmation
        end
    end
    f.button :Submit
end

如果您在第一次创建成员时自动生成密码,这将在您创建新成员时隐藏密码字段。

于 2011-12-08T22:06:01.257 回答
10

我已经找到了一种在视图中使用一些逻辑的方法。可以肯定的是,这不是最好的方法,但它会做我想要的,直到我找到更好的方法。这是我正在使用的逻辑:

<% if controller.action_name == 'new' %>
new form
<% else %>
edit form
<% end -%>
于 2011-07-18T13:02:15.573 回答
2

我不确定它是否可以直接使用form. 如果您查看代码,您会发现只考虑了最后一次调用。另一方面,您可以尝试以下方法:

config.set_page_config :new do
  form :partial => 'form'
end

但我宁愿向开发人员询问此功能。

于 2011-08-30T23:37:31.937 回答
1

如果有人想为新页面和编辑页面呈现不同的部分,您必须:

#app/admin/document.rb
ActiveAdmin.register Document do
  form partial: 'form'
end

#app/views/admin/documents/_form.html.erb
<% if @document.new_record? %>
  <%= render partial: "form_new", resource: @document %>
<% else %>
  <%= render partial: "form_edit", resource: @document %>
<% end %>

#app/views/admin/documents/_form_new.html.erb
<%= semantic_form_for [:admin, @document], builder: Formtastic::FormBuilder do |f| %>
  <%= f.semantic_errors %>
  <%= f.inputs do %>
    <%= f.input :name %>
  <% end %>
  <%= f.actions %>
<% end %>
于 2016-02-17T10:09:10.260 回答
0

您可以创建一个充当新表单的自定义页面,在那里呈现一个包含任意表单代码的部分。

因此,在您的管理目录中,您创建一个new_document.rb包含

  ActiveAdmin.register_page "New Document" do

    content do
      panel "Create a new document" do
        render :partial => "admin/documents/custom_form", :locals => {document: Document.new}
      end 
    end

  end

然后,您将任意形式的表单放入其中,admin/documents/custom_form并将您的任意控制器操作(也称为collection_action.admin/documents

所以基本上在 activeadmin 框架中做普通的 rails 类型的东西。

于 2012-08-23T04:53:56.090 回答