2016-07-05 2 views
1

Я использую Rails Admin для моей области администрирования. Панель боковой панели должна иметь некоторые ссылки на экземпляры модели. В rails_admin.rb я пытался что-то вроде:Rails Адреса администраторов внутри config

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

@farhatmihalko Я хочу добавить ссылки на показ моих конференций. – hcarreras

+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:

Эта власть часто высмеивали, как просто слишком много для простых смертных программистов для обработки.

+0

Не совсем то, что мне нужно. Даже если у меня есть патч main_navigation, я не хочу показывать все экземпляры всех моделей. Я хочу показать примеры моей модели конференции. Спасибо за ваше время в любом случае :) – hcarreras

+0

@dioshari, произнеся «patch», я имею в виду, что вы можете добавить код, который покажет, что вам нужно (экземпляры конференции) –

+0

@dioshari о динамическом добавлении с помощью javascript? –