Pregunta

¿Hay algún método de ayuda (Aparte predeterminado carriles de migas de pan ) que genera el pan navegación miga de forma dinámica para una página en particular sin tener que pasar parámetros triviales en la aplicación REST? Es decir, algo que se da cuenta de forma automática cuando el usuario se basa en la url REST ella está visitando?

Para la aplicación antes mencionada, tenemos que pasar parámetros como

RESTO

<% add_crumb(‘Profile’, user_profile_path) %>

Página actual

<% add_crumb(“My Incoming Messages”, request.path) %>

Tiene que haber una manera de generalizar el código de modo que no se requiere ningún paso de parámetros y debería funcionar para todas las aplicaciones RESTful con una configuración mínima.

¿Fue útil?

Solución

Se desarrolló un simple truco. El método, sin embargo asume que existe un 'nombre' método para cada objeto del modelo correspondiente a cada recurso en la url REST. Sea lo que devuelve el método 'nombre' se muestra como nombre de ruta de navegación. Si no se encuentra, se muestra como es, sin por lo que es enlazar a nada. Separador utilizado es '->'. Usted puede cambiar para adaptarse a su requisito

def get_bread_crumb(url)
  begin
    breadcrumb = ''
    sofar = '/'
    elements = url.split('/')
    for i in 1...elements.size
      sofar += elements[i] + '/'
      if i%2 == 0
        begin
          breadcrumb += "<a href='#{sofar}'>"  + eval("#{elements[i - 1].singularize.camelize}.find(#{elements[i]}).name").to_s + '</a>'
        rescue
          breadcrumb += elements[i]
        end
      else
        breadcrumb += "<a href='#{sofar}'>#{elements[i].pluralize}</a>"
      end
      breadcrumb += ' -> ' if i != elements.size - 1
    end
    breadcrumb
  rescue
    'Not available'
  end
end

El método acepta generalmente request.url (lo cual dado el URL de la página actual) como parámetro. El método acepta la url a propósito para fines de personalización. Para generar la ruta de exploración, sólo tiene que añadir siguiente código en su opinión -

<%= get_bread_crumb(request.url) %>

Para el /ideabox/2/idea/1 url, la miga de pan se parece a

texto alternativo http://www.imagechicken.com/uploads/1234855404069992300.png

Perdone si la calidad del código no es tan grande. Estoy seguro de que este código puede ser re-factorizar pero también estoy seguro de que sería capaz de hacer eso antes de usarlo.

Gracias.

Otros consejos

La solución proporcionada por chirantan es grande. Si necesita breabcrumbs para el controlador de espacio de nombres y la necesidad de cambiar el pan rallado, dependiendo del espacio de nombres, así entonces prueba este. Esto no es perfecta, pero refactorearlo como sea necesario. Funciona para mi proyecto.

Definir un nuevo ayudante: navigation_helper.rb

module NavigationHelper

  def navigation_add(title, url, namespace)

    if defined? @@namespace and !@@namespace.nil? and @@namespace == namespace
      @@navigation ||= []
    else
      @@navigation = []
    end

    @@navigation << {title: title, url: url} unless title == "Home"

    new_nav = []
    @@navigation.each do |hash|
      new_nav.push hash
      if hash[:title].to_s == title.to_s
        break
      end
    end

    @@navigation = new_nav
    @@navigation.uniq!
    @@namespace = namespace
  end

  def render_navigation
    if (request.path_parameters[:controller].sub('/', '::_').camelize + 'Controller').classify.constantize.action_methods.to_a.include? 'index'
      navigation_add controller_name.camelize.to_s, request.path_parameters.merge({action: 'index'}).except(:id), params[:controller].include?('/') ? params[:controller].split("/").first : nil
    end
    if defined? @@navigation
      render partial: 'navigation/navigation', locals: { navs: @@navigation, namespace: @@namespace }
    else
      render text: ''
    end
  end
end

A continuación, definir una vista para este _navigation.haml ayudante

- unless navs.blank?

  %ol.breadcrumb

    - navs.each_with_index do |nav, index|

      - if index == 0

        %li=link_to fa_icon('arrow-left', text: 'Go Back'), :back

        - unless namespace.nil?

          %li

            %h4.inline= request.fullpath.split('/')[1].gsub('-', '_').camelize

            = fa_icon('angle-double-right')

      %li= link_to_unless (nav[:title] == controller_name.camelize and action_name == 'index'),  fa_icon(nav[:title].downcase.singularize, text: nav[:title]), nav[:url]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top