2011-07-17 14 views
36

Używam Active Admin, aby zapewnić administratora niektórym modelom. Muszę dostarczyć dostosowany nowy formularz dla jednego z nich, ale pozostaw formularz edycji jako domyślny dostarczony przez Active Admin. Oto co mam. Działa on w to, że daje mi nową formę chcę, ale forma edycji jest również stosując nową formę, która nie jest to, co chcę:Aktywny administrator: dostosuj tylko nowy formularz

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

Próbowałem to, ale daje błąd to "nowe" jest niezdefiniowaną metodą:

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

Odpowiedz

11

Znalazłem sposób, aby to zrobić z pewną logiką w widoku. Nie jest to najlepszy sposób, aby się upewnić, ale robi to, co chcę, dopóki nie wymyślę lepszego sposobu. Oto logika Używam:

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

ma być lepszy sposób to zrobić i chciałbym wiedzieć, co to jest! to nęka mnie w tej chwili. – sorens

+1

@sorens - nie w bieżącej wersji Active Admin. Będziesz musiał oddzielić formularze w logice widoku, ActiveAdmin nie rozróżnia edycji od nowej. – eugen

2

Nie jestem pewien, można to zrobić bezpośrednio z form. Jeśli spojrzysz na numer code, zobaczysz, że brane jest pod uwagę tylko ostatnie połączenie. Z drugiej strony możesz wypróbować coś takiego:

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

Ale wolałbym prosić deweloperów o tę funkcję.

78

Jeśli chcesz po prostu ukryć lub pokazać niektóre pola w nowej formie (np pole, które można wygenerować automatycznie w modelu z wykorzystaniem before_create), można to zrobić:

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 

To ukryje hasło pola podczas tworzenia nowego członka w przypadku automatycznego generowania haseł przy pierwszym utworzeniu członka.

+7

'f.object.new_record?' Działa doskonale dla mnie! – Frexuz

+1

Z jakiegoś powodu, jeśli próbuję tego, mój nowy formularz jest w porządku, ale mój formularz edycji nie ma teraz pól. Jakieś sugestie? –

+0

Wydaje się działać dla mnie, jeśli określisz klauzulę if i else z ... new_record? : 'if f.object.new_record? f.input: email else f.input: email f.input: hasło f.input: password_confirmation end' – Jan

0

Można utworzyć niestandardową stronę, która działa jak nowa forma, wyrenderować częściową, która zawiera dowolny kod formularza.

Tak, w katalogu administratora zrobić plik new_document.rb zawierający

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 

Następnie umieścić dowolną formę formtastic w admin/documents/custom_form a arbitralne działania kontroler aka collection_action w admin/documents.

Więc w zasadzie robi normalne rzeczy typu szyn w ramach programu activeadmin.

1

Jeśli ktoś chce uczynić różnych partials dla nowych i edytować strony trzeba:

#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 %> 
tam
Powiązane problemy