undefined method `has_many' for Formtastic

activeadmin, formtastic, ruby-on-rails-3

Solution

ActiveAdmin extends formtastic with some useful helpers such as `has_many` (`lib/active_admin/form_builder.rb` in the activeadmin gem).

Unfortunately, these helpers are not available by default in your templates.

Here are two options:

If you don't need the extra `has_many` functionality (it looks like active_admin adds some javascript to make it easy to add a new record to the collection), then you can use stock formtastic. This example should work fine in the activeadmin file as well as in a partial:

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 

Use the ActiveAdmin form builder explicitly:

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

I hope this helps.

Problem

I'm getting this error : ``` undefined method `has_many' for #<Formtastic::SemanticFormBuilder:0xb410d4c> ``` It work when I use it like this : ``` 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 ``` But it doesn't work in a partial, i need to call the has_many method by a different way or something else ?

Original source