活动pipe理员:只定制新表单
我正在使用Active Admin为某些模型提供pipe理员。 我需要为其中的一个提供自定义的新表单,但将编辑表单保留为Active Admin提供的默认表单。 这是我的。 它的工作原理是它给了我想要的新forms,但编辑forms也使用了新的forms,这不是我想要的:
ActiveAdmin.register Document do form :partial => 'form' end
我试过这个,但它给出了一个错误,“新”是一个未定义的方法:
ActiveAdmin.register Document do new do form :partial => 'form' end end
如果您只想隐藏或显示新窗体上的特定字段(例如,使用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
如果您在第一次创build成员时自动生成密码,则会在创build新成员时隐藏密码字段。
我已经想出了一种在视图中用一些逻辑来实现的方法。 可以肯定的不是最好的方法,但是直到找出一个更好的方法,它才是我想要的。 这是我正在使用的逻辑:
<% if controller.action_name == 'new' %> new form <% else %> edit form <% end -%>
我不确定它可以直接与form
完成。 如果你看看代码,你会看到只有最后一次通话被考虑在内。 另一方面,你可能会尝试像这样:
config.set_page_config :new do form :partial => 'form' end
但我宁愿问开发者这个function。
如果有人想为新的和编辑页面渲染不同的部分,你必须:
#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 %>
您可以创build一个充当新窗体的自定义页面,在那里渲染包含任意窗体代码的部分。
所以,在你的pipe理员目录下,你要创build一个包含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
然后你把你的任意formtasticforms在admin/documents/custom_form
和你的任意控制器动作又名collection_action
在admin/documents
。
所以基本上在activeadmin框架中做普通的railstypes的东西。