2012-02-05 33 views
10

Tôi đang sử dụng ActiveAdmin (0.4.0) với Rails (3.1.1).Làm cách nào để xử lý nhiều tài nguyên lồng nhau trong ActiveAdmin?

Tôi không thể tìm thấy cách hay/hack để xử lý nhiều tài nguyên lồng nhau.

Considerer 3 mô hình như:

class Program < ActiveRecord::Base 
    has_many :knowledges, :dependent => :destroy 
end 

class Knowledge < ActiveRecord::Base 
    belongs_to :program 
    has_many :steps, :dependent => :destroy 
end 

class Step < ActiveRecord::Base 
    belongs_to :knowledge 
end 

Và các nguồn lực ActiveAdmin:

ActiveAdmin.register Program do 
end 

ActiveAdmin.register Knowledge do 
    belongs_to :program 
end 

ActiveAdmin.register Step do 
    belongs_to :knowledge 
end 

Trong routes.rb:

namespace :admin do 
    resources :programs do 
    resources :knowledges do 
     resources :steps 
    end 
    end 
end 

Dưới đây là các url đối với chỉ số của chương trình, kiến thức và các bước:
http://localhost:3000/admin/programs
http://localhost:3000/admin/programs/1/knowledges
http://localhost:3000/admin/programs/1/knowledges/1/steps

Không có vấn đề cho quản trị viên "tri thức" nhưng "Bước" admin không giữ bối cảnh lồng nhau.

Ví dụ, khi tôi sử dụng bộ lọc trong bướC# index Tôi đang chuyển hướng đến:
http://localhost:3000/admin/knowledges/1/steps?params ...
Nhưng nó phải có được:
http://localhost:3000/admin/programs/1/knowledges/1/steps?params ...

Cùng một vấn đề khi tôi tạo một tài nguyên mới:
http://localhost:3000/admin/knowledges/1/steps/new
Thay vì:
http://localhost:3000/admin/programs/1/knowledges/1/steps/new

Cùng p roblem với mẩu bánh mì ... vv ...

Những gì tôi đã cố gắng cho đến nay trong app/admin/steps.rb:

ActiveAdmin.register Step do 

    belongs_to :knowledge 

    config.clear_action_items! 
    action_item :only => :index do 
    link_to('Create Step', new_admin_program_knowledge_step_path(knowledge.program.id, knowledge.id)) 
    end 

    index do 
    column :id 
    column :knowledge 
    column :title 
    column "Actions" do |step| 
     link_to("Voir", admin_program_knowledge_step_path(step.knowledge.program, step.knowledge, step), :class => "member_link show_link") +\ 
     link_to("Editer", edit_admin_program_knowledge_step_path(step.knowledge.program, step.knowledge, step), :class => "edit_knowledge member_link edit_link", :id => "knowledge_#{dom_id(knowledge)}") +\ 
     link_to("Supprimer", admin_program_knowledge_step_path(step.knowledge.program, step.knowledge, step), :class => "member_link delete_link", :method => :delete, :confirm => "Delete?") 
    end 
    end 

    filter :id 
    filter :title 
    filter :subtitle 
    filter :stage_type 
    filter :order_by 
    filter :created_at 
    filter :updated_at 

    form :partial => "form" 

end 

Và trong app/views/admin/bước/_form. html.erb Tôi phải sử dụng trình tạo biểu mẫu activeadmin:

<%= semantic_form_for(resource, :url => admin_program_knowledge_steps_path(resource.knowledge.program, resource.knowledge), :builder => ActiveAdmin::FormBuilder) do |f| 
    f.inputs "Step" do 
    f.input :knowledge, :as => :hidden 
    f.form_buffers.last << f.template.content_tag(:li, f.template.content_tag(:label, "Knowledge")+f.template.content_tag(:p, f.object.knowledge.title)) 
    f.input :title 
    f.input :order_by 
    end 
    f.buttons 
end %> 

Vâng ... Tôi bị kẹt.

Cách xử lý độc đáo này? Bất kỳ manh mối đánh giá cao ...

Trả lời

4

Vâng, giải pháp là khá đơn giản ... https://github.com/josevalim/inherited_resources

+2

này dường như không làm việc với đường ray 3.2.6 và 0.4.4 active_admin –

+0

Để xấu .. có thể hỏi Jose Valim về cách xử lý đúng với phiên bản AA mới ... và đăng giải pháp ở đây. Thx –

+0

Nó hoạt động rất tốt trong phiên bản mới nhất của Rails 4.1' và 'ActiveAdmin 1.0pre' (từ chính). Cảm ơn bạn :). –

Các vấn đề liên quan