【问题标题】:How to handle multiple nested resources in ActiveAdmin?如何在 ActiveAdmin 中处理多个嵌套资源?
【发布时间】:2012-02-05 14:40:26
【问题描述】:

我将 ActiveAdmin (0.4.0) 与 Rails (3.1.1) 一起使用。

我找不到处理多个嵌套资源的好方法/hack。

考虑 3 个模型:

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

还有 ActiveAdmin 资源:

ActiveAdmin.register Program do
end

ActiveAdmin.register Knowledge do
  belongs_to :program
end

ActiveAdmin.register Step do
  belongs_to :knowledge
end

在 routes.rb 中:

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

这里是程序索引、知识和步骤的网址:
http://localhost:3000/admin/programs
http://localhost:3000/admin/programs/1/knowledges
http://localhost:3000/admin/programs/1/knowledges/1/steps

“知识”管理员没有问题,但“步骤”管理员不保留嵌套上下文。

例如,当我在 steps#index 中使用过滤器时,我被重定向到:
http://localhost:3000/admin/knowledges/1/steps?params...
但一定是:
http://localhost:3000/admin/programs/1/knowledges/1/steps?params...

创建新资源时同样的问题:
http://localhost:3000/admin/knowledges/1/steps/new
而不是:
http://localhost:3000/admin/programs/1/knowledges/1/steps/new

面包屑也有同样的问题……等等……

到目前为止我在 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

在 app/views/admin/steps/_form.html.erb 我必须使用 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 %>

嗯...我卡住了。

如何很好地处理这个问题?任何线索表示赞赏...

【问题讨论】:

    标签: ruby-on-rails-3 activeadmin


    【解决方案1】:

    嗯,解决方法很简单... https://github.com/josevalim/inherited_resources

    ActiveAdmin.register Step do
      controller do
        nested_belongs_to :program, :knowledge
      end
    end
    

    【讨论】:

    • 这似乎不适用于 rails 3.2.6 和 active_admin 0.4.4
    • 糟糕...也许可以向 Jose Valim 询问使用新版本 AA 处理此问题的正确方法...并在此处发布解决方案。谢谢
    • 它在最新的Rails 4.1 和ActiveAdmin 1.0pre(来自master)中运行良好。谢谢你:)。
    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多