5

Activeadmin 在单个文件上注册一个页面,其中包含所有逻辑:索引、显示、编辑等。

我想将 task.rb 拆分为 task_index.rb、task_show.rb、task_edit.rb 等。

那么,你应该怎么做呢?

注意:我知道在每个文件中创建一个 ActiveAdmin.register 块(如果Task存在,它会附加)将完成这项工作,但这个问题旨在提供一种通用方法,而不是解决这个特定的查询。

-- admin/task.rb
#encoding: utf-8

ActiveAdmin.register Task do
 [Lot's of actions]
  member_action....
  member_action....
  member_action....
  batch_action....

 [Index stuff]
  filter....
  scope....
  scope....
  scope.... 
  index do
   column...
   column...
   column...
   column...
  end

 [Edit stuff]
  form do |f|
    f.input....
    f.input....
    f.input....
    f.input....
    f.input....
  end
 [etc etc etc]
end
----------------

我正在考虑模块,但我不知道如何去做。

4

1 回答 1

4

我就是这样做的

模块源

module ResourceDSL
  module ActsAsClone

    def acts_as_clone
      controller do
        def new
          instance_variable_name = active_admin_config.resource_class.to_s.underscore
          resource = active_admin_config.resource_class.find(params[:id]) rescue nil
          attrs = resource.nil? ? {} : resource.attributes
          resource = active_admin_config.resource_class.new(attrs)
          instance_variable_set("@#{instance_variable_name}", resource)
        end
      end

      action_item :only => [:show, :edit] do
        if can? :create, resource and (!resource.respond_to?(:live?) or resource.live?)
          link_to "Copy", :action => :new, :id => resource.id
        end
      end
    end
  end
end

包括 ActiveAdmin::ResourceDSL

ActiveAdmin::ResourceDSL.send :include, ResourceDSL::ActsAsClone

然后你可以

ActiveAdmin.register Account do
  menu :parent => "Billing",  :priority => 10
  acts_as_clone
end
于 2014-01-27T20:26:27.820 回答