47 votes

Admin. active : 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'entre eux, mais laisser le formulaire d'édition comme celui fourni par défaut par Active Admin. Voici ce que j'ai. Il fonctionne dans le sens où 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é, mais le message d'erreur suivant s'affiche : "new" est une méthode non définie :

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

101voto

ryanb006 Points 421

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 permettra de masquer 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.

10voto

Michael Irwin Points 1398

J'ai trouvé un moyen de le faire avec une certaine logique dans la vue. Ce n'est pas le meilleur moyen, certes, 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 -%>

2voto

Serabe Points 2618

Je ne suis pas sûr que cela puisse être fait directement avec form . Si vous jetez un coup d'œil à la 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 cette fonctionnalité aux développeurs.

1voto

across Points 422

Si quelqu'un veut rendre des partiels différents pour les pages nouvelles et les pages modifiées, il faut le faire :

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

0voto

mattfitzgerald Points 115

Vous pouvez créer une page personnalisée qui fait office de nouveau formulaire et y rendre une partie qui contient un code de formulaire arbitraire.

Ainsi, 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 arbitraire formtastique dans admin/documents/custom_form et votre action de contrôleur arbitraire alias collection_action en admin/documents .

Il s'agit essentiellement de faire des choses normales de type rails dans le cadre d'Activeadmin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X