我正在使用Active Admin为某些模型提供管理员。我需要为其中一个提供自定义的新表单,但将编辑表单保留为Active Admin提供的默认表单。这就是我所拥有的。它的工作原理是它给了我想要的新表格,但编辑表格也使用了新表格,这不是我想要的:
ActiveAdmin.register Document do
form :partial => 'form'
end
我试过这个,但它给出了一个错误,'new'是一个未定义的方法:
ActiveAdmin.register Document do
new do
form :partial => 'form'
end
end
答案 0 :(得分:85)
如果您只想隐藏或显示新表单上的某些字段(例如,您使用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
如果您在第一次创建成员时自动生成密码,则会在创建新成员时隐藏密码字段。
答案 1 :(得分:10)
我已经找到了一种方法,可以在视图中使用某些逻辑。当然,这不是最好的方式,但是在找到更好的方法之前,它会做我想做的事情。这是我正在使用的逻辑:
<% if controller.action_name == 'new' %>
new form
<% else %>
edit form
<% end -%>
答案 2 :(得分:2)
我不确定是否可以直接使用form
完成。如果您查看code,您会看到只考虑最后一次通话。另一方面,您可以尝试以下方式:
config.set_page_config :new do
form :partial => 'form'
end
但我宁愿向开发人员询问此功能。
答案 3 :(得分: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 %>
答案 4 :(得分: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
然后,您将{* 1}}中的任意形式表单和admin/documents/custom_form
中的任意控制器操作collection_action
放在一起。
所以基本上在activeadmin框架中做正常的rails类型。