【问题标题】:Rails Admin routes inside config配置中的 Rails Admin 路由
【发布时间】:2016-07-05 09:27:43
【问题描述】:

我正在为我的管理区域使用 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 中看不到它

谢谢

【问题讨论】:

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


【解决方案1】:

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

我检查了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

附:我喜欢你从rails doctrine 看到的关于monkey patching 的内容:

这种权力经常被嘲笑为太过分了 凡人程序员来处理。

【讨论】:

  • 不是我真正需要的。即使我修补 main_navigation,我也不想显示所有模型的所有实例。我想展示我的模型会议的实例。无论如何感谢您的时间:)
  • @dioshari 说patch 我的意思是你可以添加代码,这将显示你需要什么(会议实例)
  • @dioshari 使用javascript动态添加怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多