web-dev-qa-db-fra.com

Admin actif: personnaliser uniquement le nouveau formulaire

J'utilise Active Admin pour fournir un administrateur à certains modèles. Je dois fournir un nouveau formulaire personnalisé pour l'un d'eux, mais laisser le formulaire de modification par défaut fourni par Active Admin. Voici ce que j'ai. Cela fonctionne en ce qu'il me donne le nouveau formulaire que je veux, mais le formulaire d'édition utilise également le nouveau formulaire, ce qui n'est pas ce que je veux:

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

J'ai essayé cela, mais cela donne une erreur que "nouveau" est une méthode non définie:

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

J'ai trouvé un moyen de le faire avec une certaine logique dans la vue. Ce n'est pas le meilleur moyen, bien sûr, mais il fait ce que je veux jusqu'à ce que je trouve un meilleur moyen. Voici la logique que j'utilise:

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

Si vous souhaitez simplement masquer ou afficher certains champs sur le nouveau formulaire (par exemple, un champ que vous générez automatiquement dans le modèle à l'aide de 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 la première fois que le membre est créé.

91
ryanb006

Je ne suis pas sûr que cela puisse être fait directement avec form. Si vous regardez le code vous verrez que seul le dernier appel est pris en compte. D'un autre côté, 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é.

2
Serabe

Si quelqu'un veut rendre différents partiels pour les pages nouvelles et éditées, 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 %>
1
across

Vous pouvez créer une page personnalisée qui agit comme le nouveau formulaire, y rendre un partiel contenant du code de formulaire arbitraire.

Donc, dans votre répertoire d'administration, 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 mettez ensuite votre formulaire formtastic arbitraire dans admin/documents/custom_form et votre action de contrôleur arbitraire aka collection_action dans admin/documents.

Donc, en gros, faire normalement Rails type de trucs dans le cadre activeadmin.

0
mattfitzgerald