Ruby:ActiveAdmin Gems:我们如何检索所有已注册的资源?

时间:2014-04-15 08:58:08

标签: ruby activeadmin

是否可以检索Active Admin界面的所有已注册资源?

我在活动管理员中注册了很多资源,我希望有一个已注册资源的列表,以便它可以放入我的下拉框中。

可以这样做吗?

2 个答案:

答案 0 :(得分:2)

我保证必须有更简洁的方法,但您可以通过访问已定义的命名空间中的资源集合来访问已添加到AA的模型。例如,如果您在:admin命名空间

中定义了AA
 > ActiveAdmin.application.namespace(:admin).resources.select {|r| r.respond_to? :resource_class_name}.map(&:resource_class_name) 

将生成类名称数组..

=> ["::Activity", "::ActivityType", "::AdminUser"]

它会为您提供一个可以在按下按钮中按下的项目列表。

答案 1 :(得分:0)

# I came up with this to generate a hash of
# :namespace => array of arrays containing 2 elements
# [title, link]
#
# With this <strikethrough>it should be trivial to</strikethrough> you can
# create a clickable select.

Hash[*
  ActiveAdmin.
  application.
  namespaces.
  collect{ |ns,v| [  
    ns, 
    v.resources.
        keys.
        select { |k|
            r = ActiveAdmin.application.namespaces[ns].resources.find_by_key(k)
            r.respond_to?(:resource_class_name) && !r.belongs_to?
        }.

        collect{|k|
          [
            k, 
            begin
              Rails.application.routes.url_helpers.send(
                ( 
                  "#{ns}_" + 
                  k.underscore.pluralize.gsub('/','_') + 
                  "_index_path"
                ).to_sym
              ) 
            rescue
              Rails.application.routes.url_helpers.send(
                ( 
                  "#{ns}_" + 
                  k.underscore.pluralize.gsub('/','_') + 
                  "_path"
                ).to_sym
              )
            end
          ]
        } 
  ]}.
  flatten(1)
]