2012-04-09 12 views
6

estoy recibiendo este error:método no definido `has_many' para Formtastic

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

que funcione cuando lo uso como esto:

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 

Pero no funciona en un parcial, Necesito llamar al método has_many de una manera diferente u otra cosa?

Respuesta

11

ActiveAdmin se extiende formtastic con algunos ayudantes útiles como has_many (lib/active_admin/form_builder.rb en la gema activeadmin).

Desafortunadamente, estos ayudantes no están disponibles por defecto en sus plantillas.

Aquí hay dos opciones:

  1. Si usted no necesita la funcionalidad adicional has_many (se ve como active_admin añade algo de JavaScript para hacer más fácil para agregar un nuevo registro a la colección), entonces puede usar stock formtastic. Este ejemplo debería funcionar bien en el archivo activeadmin, así como en un parcial:

    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. Utilice el formulario ActiveAdmin constructor explícitamente:

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

espero que esto ayude.

+0

la segunda opción que utiliza como quiero añadir elementos secundarios que utilizan un área de entrada de interfaz de usuario jQuery Autocompletar. Parece que el parcial ahora tiene acceso al has_many helper, pero ahora dice el método indefinido 'new_record? ' para nil: NilClass para has_many cuando intenta crear un nuevo campo. ¿Alguna idea de lo que puede estar causando esto? Sospecho que uno necesita hacer un .build en el controlador? –

+0

No importa, tuve que usar accepts_nested_attributes_for en el modelo para que funcione correctamente. :) –

+0

Esto solucionó el primer error para mí, pero ahora aparece el error "no se puede modificar la cadena inmovilizada" en la línea que crea el has_many. ¿Algunas ideas? – elsurudo

3

hay una solución

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

O, si desea utilizar parcial:

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