2011-03-17 10 views
67

Quiero que mis direcciones URL usen el guión - en lugar del guión bajo _ como separadores de palabras. Por ejemplo, controller/my-action en lugar de controller/my_action.Rutas con Dash `-` En lugar de Subrayar` _` en Ruby on Rails

estoy sorprendido por dos cosas:

  1. Google et al. continuar a distinguirlos.
  2. Que Ruby on Rails no tiene un parámetro de configuración global simple para asignar - a _ en el enrutamiento. O lo hace?

La mejor solución que tengo es usar :as o una ruta con nombre.

Mi idea es modificar el enrutamiento de Rails para verificar esa configuración global y cambiar - a _ antes de enviar a una acción del controlador.

¿Hay una manera mejor?

+0

yo también prefiero guiones de subrayado en las URL (como en los identificadores de hTML/CSS de los elementos, nombres y clases), pero no he tratado de ponerlo en práctica. Me gustaría migrar a los raíles 3 primero y luego preocuparme por esto porque Rails 3 tiene muchas actualizaciones drásticas para el middleware y el enrutamiento. – yfeldblum

+0

Gracias Justicia. Esperaré hasta que me actualice y me familiarice con v3. – pduey

Respuesta

55

con los carriles 3 y más tarde se puede hacer así:

resources :user_bundles, :path => '/user-bundles' 

Otra opción es modificar rieles, a través de un inicializador. No lo recomiendo, ya que puede romperse en versiones futuras.

El uso de :path como se muestra arriba es mejor.

# Using private APIs is not recommended and may break in future Rails versions. 
# https://github.com/rails/rails/blob/4-1-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L1012 
# 
# config/initializers/adjust-route-paths.rb 
module ActionDispatch 
    module Routing 
    class Mapper 
     module Resources 
     class Resource 
      def path 
      @path.dasherize 
      end 
     end 
     end 
    end 
    end 
end 
+1

Soy nuevo en Rails. ¿A qué archivo agregarías una línea como esta? –

+0

Consulte esta guía: http://guides.rubyonrails.org/routing.html – sandstrom

+3

tiene que haber una forma mejor y más rápida de convertir todas las rutas que tienen undersore a guiones – carbonr

2

Puede usar rutas con nombre. Permitirá usar '-' como separadores de palabras. En routes.rb,

map.name_of_route  'a-b-c',  :controller => 'my_controller', :action => "my_action" 

Ahora URLs como http://my_application/a-b-c iría al controlador y la acción especificada.

Además, para la creación de direcciones URL dinámicas

map.name_of_route 'id1-:id2-:id3',  :controller => 'my_controller', :action => "my_action" 

en este caso 'ID1, ID2 & id2 se pasa como http params a la acción

En tus acciones y puntos de vista,

name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3) 

evaluaría a la url 'http://my_application/val1-val2-val3'.

+2

Quiero evitar el mantenimiento manual del enrutamiento, por lo que las rutas con nombre están fuera. Solo quiero que el enrutamiento de los rieles me reemplace al por mayor y mantenga mis archivos de configuración ajustados. – pduey

1

si utiliza guiones en un archivo de controlador y vista a continuación, sólo tiene que utilizar guiones en su archivo de rutas, y funcionará ..

get 'blog/ejemplo- el texto' este es mi ruta para este controlador

example_text def final < - esta es mi controlador de

y example_text.html.erb es el archivo

y este es el sitio de enlace real.com/blog/ejemplo de texto

i cuenta de esto es que funciona para mí, y es más eficaz que subraya SEO sabia

2

Usted puede sobrecargar los nombres del controlador y la acción de utilizar guiones:

# config/routes.rb 
resources :my_resources, path: 'my-resources' do 
    collection do 
    get 'my-method', to: :my_method 
    end 
end 

Usted puede probar en la consola:

rails routes -g my_resources 
my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method