2012-04-09 16 views
6

sto ottenendo questo errore:non definito metodo `has_many' per Formtastic

undefined method `has_many' for #<Formtastic::SemanticFormBuilder:0xb410d4c> 

funziona quando lo uso così:

ActiveAdmin.register Ressource do 
    form do |f| 
     f.inputs do 
      f.input :offer_id, :as => :hidden 
      f.input :name 
      f.input :category, :include_blank => false, :collection => Category.order('place ASC').all, :member_label => :to_label 
      f.input :description, :input_html => {:class => 'editor'} 
      f.input :price 
     end 
     f.has_many :roles do |app_f| 
      app_f.inputs do 
       if not app_f.object.id.nil? 
        app_f.input :_destroy, :as => :boolean, :label => "Supprimer l'utilisateur du lot" 
       end 
       app_f.input :user, :member_label => :to_label, :label => 'Assigné le lot' 
       app_f.input :name, :include_blank => false 
      end 
     end 
     f.buttons 
    end 
end 

Ma non funziona in un parziale devo chiamare il metodo has_many in un modo diverso o qualcos'altro?

risposta

11

ActiveAdmin estende formtastic con alcuni utili helper come has_many (lib/active_admin/form_builder.rb nella gemma activeadmin).

Sfortunatamente, questi helper non sono disponibili di default nei modelli.

Qui ci sono due opzioni:

  1. Se non è necessario il has_many funzionalità extra (sembra active_admin aggiunge alcuni javascript per rendere più semplice per aggiungere un nuovo record per la raccolta), allora si posso usare stock formtastic. Questo esempio dovrebbe funzionare bene nel file activeadmin così come in un parziale di:

    ActiveAdmin.register Ressource do 
        form do |f| 
        # ... 
        f.inputs :for => :roles do |app_f| 
         # ... 
         app_f.input :name, :include_blank => false 
        end 
        f.buttons 
        end 
    end 
    
  2. utilizzare il generatore di forma ActiveAdmin esplicitamente:

    <%= semantic_form_for [:admin, @resource], builder: ActiveAdmin::FormBuilder do |f| %> 
        <!-- ... --> 
    
        <%= f.has_many :teachers do |app_f| %> 
        <%= app_f.inputs do %> 
         <!-- ... --> 
        <% end %> 
        <% end %> 
    
        <%= f.buttons %> 
    <% end %> 
    

Spero che questo aiuta.

+0

ho usato l'opzione due come voglio aggiungere elementi figlio utilizzando una zona di ingresso jQuery UI completamento automatico. Sembra che il parziale ora abbia accesso al helper has_many, ma ora dice il metodo non definito 'new_record? ' per nil: NilClass per has_many quando si tenta di creare un nuovo campo. Qualche idea su cosa potrebbe causare questo? Sospetto che sia necessario eseguire una .build nel controller? –

+0

Non importa, ho dovuto usare accept_nested_attributes_for nel modello affinché funzioni correttamente. :) –

+0

Questo ha corretto il primo errore per me, ma ora ottengo un errore "impossibile modificare la stringa congelata" sulla riga che crea has_many. Qualche idea? – elsurudo

3

c'è una soluzione

form :html => {:multipart => true} do |f| 
end 

Oppure, se si desidera utilizzare parziale:

<%= active_admin_form_for [:admin, @resource] ,:html => {:multipart => true} do |f|%> 
<% end %> 
Problemi correlati