2012-04-09 23 views
6

Tôi nhận được lỗi này:không xác định phương pháp 'has_many' cho Formtastic

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

Nó hoạt động khi tôi sử dụng nó như thế này:

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 

Nhưng nó không hoạt động trong một phần, tôi cần gọi phương thức has_many bằng cách khác hay cái gì khác?

Trả lời

11

ActiveAdmin mở rộng formtastic với một số người trợ giúp hữu ích như has_many (lib/active_admin/form_builder.rb trong đá quý activeadmin).

Thật không may, những người trợ giúp này không có sẵn theo mặc định trong các mẫu của bạn.

Dưới đây là hai lựa chọn:

  1. Nếu bạn không cần thêm has_many chức năng (có vẻ như active_admin thêm một số javascript để làm cho nó dễ dàng để thêm một kỷ lục mới cho bộ sưu tập), sau đó bạn có thể sử dụng stock formtastic. Ví dụ này sẽ làm việc tốt trong file activeadmin cũng như trong một phần:

    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. Sử dụng trình tạo hình thức ActiveAdmin một cách rõ ràng:

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

Tôi hy vọng điều này sẽ giúp.

+0

tôi sử dụng tùy chọn hai như tôi muốn để thêm các mục con bằng cách sử dụng diện tích đầu vào jQuery UI Autocomplete. Có vẻ như một phần bây giờ có quyền truy cập vào helper has_many, nhưng bây giờ nó nói phương thức undefined 'new_record? ' cho nil: NilClass cho has_many khi cố tạo một trường mới. Bất kỳ ý tưởng gì có thể gây ra điều này? Tôi nghi ngờ một trong những cần phải làm một .build trong bộ điều khiển? –

+0

Đừng bận tâm, tôi phải sử dụng accept_nested_attributes_for trong mô hình để nó hoạt động bình thường. :) –

+0

Điều này đã sửa lỗi đầu tiên cho tôi, nhưng bây giờ tôi nhận được lỗi "không thể sửa đổi chuỗi cố định" trên dòng tạo has_many. Bất kỳ ý tưởng? – elsurudo

3

Có một giải pháp

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

Hoặc, nếu bạn muốn sử dụng một phần:

<%= active_admin_form_for [:admin, @resource] ,:html => {:multipart => true} do |f|%> 
<% end %> 
Các vấn đề liên quan