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
----------------
我正在考虑模块,但我无法弄清楚如何。
答案 0 :(得分: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