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
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 -%>
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éé.
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é.
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 %>
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.