Rails管理员路由在配置中

时间:2016-07-05 09:27:43

标签: ruby-on-rails ruby rails-admin

我在我的管理区域使用Rails Admin。 侧边栏面板应该有一些指向模型实例的链接。 在rails_admin.rb中,我尝试过类似的内容:

RailsAdmin.config do |config|
  @navigation_links = Hash[*Conference.all.map {|conference| [conference.name, bindings[:view].main_app.show_path(model_name: 'conference', id: conference.id)]}.flatten]
  config.navigation_static_links = @navigation_links
end

但是,在这里我无法访问绑定。那么,我怎样才能获得管理资源的URL?我无法在documentation

中看到它

由于

1 个答案:

答案 0 :(得分:0)

我的回答可能不是你想要做的,但它可能会有所帮助。

我已经检查了rails_admin.gem,我发现有两种方法负责渲染侧边栏菜单。

def main_navigation
  nodes_stack = RailsAdmin::Config.visible_models(controller: controller)
  node_model_names = nodes_stack.collect { |c| c.abstract_model.model_name }

  nodes_stack.group_by(&:navigation_label).collect do |navigation_label, nodes|
    nodes = nodes.select { |n| n.parent.nil? || !n.parent.to_s.in?(node_model_names) }
    li_stack = navigation nodes_stack, nodes

    label = navigation_label || t('admin.misc.navigation')

    %(<li class='dropdown-header'>#{capitalize_first_letter label}</li>#{li_stack}) if li_stack.present?
  end.join.html_safe
end

以上方法负责获取模型列表,尤其是:

nodes_stack = RailsAdmin::Config.visible_models(controller: controller)

第二个负责在菜单中呈现项目的方法(又名li):

def navigation(nodes_stack, nodes, level = 0)
  nodes.collect do |node|
    model_param = node.abstract_model.to_param
    url         = url_for(action: :index, controller: 'rails_admin/main', model_name: model_param)
    level_class = " nav-level-#{level}" if level > 0
    nav_icon = node.navigation_icon ? %(<i class="#{node.navigation_icon}"></i>).html_safe : ''
    li = content_tag :li, data: {model: model_param} do
      link_to nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}"
    end
    li + navigation(nodes_stack, nodes_stack.select { |n| n.parent.to_s == node.abstract_model.model_name }, level + 1)
  end.join.html_safe
end

所以你可以patch这种方法来获得你需要的东西。

module RailsAdmin
  module ApplicationHelper
    def main_navigation
      # your code
    end
  end
end

rails_admin.gem module

P.S。我喜欢您可以从rails doctrine了解monkey patching

  

这种力量经常被嘲笑为太过分了   致命的程序员来处理。