Quero que meus urls usem traço em -
vez de sublinhado _
como separadores de palavras. Por exemplo, em controller/my-action
vez de controller/my_action
.
Estou surpreso com duas coisas:
- Google et al. continue a distingui-los.
- Que Ruby on Rails não tem um simples, parâmetro de configuração global para mapear
-
para_
no roteamento. Ou não é?
A melhor solução que tenho é usar :as
uma rota nomeada.
Minha ideia é modificar o roteamento do Rails para verificar essa configuração global e mudar -
para _
antes de enviar para uma ação do controlador.
Existe uma maneira melhor?
Respostas:
Com Rails 3 e posterior, você pode fazer assim:
resources :user_bundles, :path => '/user-bundles'
Outra opção é modificar o Rails, através de um inicializador. Eu não recomendo isso, pois pode falhar em versões futuras (editar: não funciona no Rails 5).
Usar
:path
como mostrado acima é melhor.# 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
fonte
Você pode sobrecarregar os nomes do controlador e da ação para usar travessões:
# config/routes.rb resources :my_resources, path: 'my-resources' do collection do get 'my-method', to: :my_method end end
Você pode testar no console:
rails routes -g my_resources my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method
fonte
Você pode usar rotas nomeadas. Isso permitirá usar '-' como separadores de palavras. Em routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Agora, urls como http: // my_application / abc iriam para o controlador e a ação especificados.
Além disso, para criar urls dinâmicos
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
neste caso 'id1, id2 e id2 seriam passados como parâmetros http para a ação
Em suas ações e visões,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
seria avaliado como url ' http: // my_application / val1-val2-val3 '.
fonte
se você usar sublinhados em um controlador e um arquivo de visualização, use apenas travessões em seu arquivo de rotas e funcionará.
get 'blog / example-text' este é o meu caminho para este controlador
def example_text end <- este é meu controlador
e example_text.html.erb é o arquivo
e este é o link real site.com/blog/example-text
percebi que isso funciona para mim e é mais eficaz do que ressaltar o SEO
fonte