Active Admin: Personnalisez uniquement le nouveau formulaire

J’utilise Active Admin pour fournir un admin à certains modèles. Je dois fournir un nouveau formulaire personnalisé pour l’un d’entre eux, mais laissez le formulaire d’édition par défaut fourni par Active Admin. Voici ce que j’ai. Cela fonctionne en ce sens qu’il me donne la nouvelle forme que je veux, mais le formulaire d’édition utilise également le nouveau formulaire, qui n’est pas ce que je veux:

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

J’ai essayé ceci, mais cela donne une erreur que “new” est une méthode non définie:

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

Si vous souhaitez simplement masquer ou afficher certains champs du nouveau formulaire (par exemple, un champ que vous générez automatiquement dans le modèle avec before_create), vous pouvez le faire:

 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 

Cela masquera les champs de mot de passe lorsque vous créez un nouveau membre dans le cas où vous générez automatiquement des mots de passe lors de la première création du membre.

J’ai trouvé un moyen de le faire avec une certaine logique dans la vue. Ce n’est pas la meilleure façon d’être sûr, mais c’est ce que je veux jusqu’à ce que je trouve une meilleure solution. Voici la logique que j’utilise:

 <% if controller.action_name == 'new' %> new form <% else %> edit form <% end -%> 

Je ne suis pas sûr que cela puisse être fait directement avec la form . Si vous regardez le code, vous verrez que seul le dernier appel est pris en compte. D’autre part, vous pouvez essayer quelque chose comme:

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

Mais je préfère demander aux développeurs cette fonctionnalité.

Si quelqu’un veut rendre différents partiels pour les nouvelles pages et les éditer, vous devez:

 #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 %> 

Vous pouvez créer une page personnalisée faisant office de nouveau formulaire, y rendre un partiel contenant un code de forme arbitraire.

Ainsi, dans votre répertoire admin, vous créez un fichier new_document.rb contenant

  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 

Vous placez ensuite votre formulaire formtastic arbitraire dans admin/documents/custom_form et votre action de contrôleur arbitraire alias collection_action dans admin/documents .

Donc, en gros, faire des rails normaux entre dans le framework activeadmin.