2012-04-09 53 views
6

我得到這個錯誤:未定義的方法`的has_many」的Formtastic

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

它,當我使用它像這樣工作的:

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 

但它不工作的部分,我需要以不同的方式或其他方式調用has_many方法?

回答

11

ActiveAdmin使用一些有用的幫助程序擴展了formtastic,例如has_many(在activeadmin gem中爲lib/active_admin/form_builder.rb)。

不幸的是,這些助手默認情況下在您的模板中不可用。

這裏有兩種選擇:

  1. 如果你不需要額外的has_many功能(它看起來像active_admin增加了一些JavaScript來使其易於添加新記錄的集合),那麼你可以使用股票formtastic。這個例子應該在activeadmin文件以及在部分做工精細:

    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. 明確使用ActiveAdmin表單生成器:

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

我希望這有助於。

+0

我用方案二,因爲我要添加使用jQuery用戶界面自動完成輸入區域子項。看起來局部現在可以訪問has_many助手,但它現在說未定義的方法'new_record?' for nil:NilClass for has_many嘗試創建新字段時。任何想法可能造成這種情況?我懷疑需要在控制器中執行.build? – 2012-05-05 23:46:37

+0

沒關係,我必須在模型中使用accep_nested_attributes_for才能正常工作。 :) – 2012-05-06 00:00:09

+0

這爲我修正了第一個錯誤,但現在我在創建has_many的行上得到了「無法修改凍結字符串」的錯誤。有任何想法嗎? – elsurudo 2014-05-04 13:14:43

3

有一個解決方案

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

或者,如果你想使用部分:

<%= active_admin_form_for [:admin, @resource] ,:html => {:multipart => true} do |f|%> 
<% end %> 
相關問題