我在我的管理区域使用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
中看到它由于
答案 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
P.S。我喜欢您可以从rails doctrine了解monkey patching
:
这种力量经常被嘲笑为太过分了 致命的程序员来处理。