Quiero que mis direcciones URL usen guiones en -
lugar de subrayados _
como separadores de palabras. Por ejemplo en controller/my-action
lugar de controller/my_action
.
Me sorprenden dos cosas:
- Google et al. seguir distinguiéndolos.
- Que Ruby on Rails no tiene un simple, parámetro de configuración global para asignar
-
a_
la ruta. ¿O lo hace?
La mejor solución que tengo es usar :as
una ruta con nombre.
Mi idea es modificar los rieles de enrutamiento para comprobar que la configuración y el cambio global -
a _
antes de enviar a una acción del controlador.
¿Existe una forma mejor?
Respuestas:
Con Rails 3 y versiones posteriores puedes hacer esto:
resources :user_bundles, :path => '/user-bundles'
Otra opción es modificar Rails mediante un inicializador. Sin embargo, no recomiendo esto, ya que puede fallar en versiones futuras (editar: no funciona en Rails 5).
Usar
: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
fuente
Puede sobrecargar los nombres de acciones y controladores para usar guiones:
# config/routes.rb resources :my_resources, path: 'my-resources' do collection do get 'my-method', to: :my_method end end
Puede probar en la consola:
rails routes -g my_resources my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method
fuente
Puede utilizar rutas con nombre. Permitirá usar '-' como separadores de palabras. En route.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Ahora las direcciones URL como http: // my_application / abc irían al controlador y la acción especificados.
Además, para crear URL dinámicas
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
en este caso, 'id1, id2 e id2 se pasarían como parámetros http 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 '.
fuente
Si usa guiones bajos en un controlador y ve un archivo, simplemente use guiones en su archivo de rutas y funcionará.
obtener 'blog / example-text' esta es mi ruta para este controlador
def example_text end <- este es mi controlador
y example_text.html.erb es el archivo
y este es el enlace real site.com/blog/example-text
pensé que esto funciona para mí, y es más efectivo que lo que subraya en cuanto a SEO
fuente