Ruby on Rails'de Alt Çizgi `_` Yerine Dash` -` ile Rotalar


88

URL'lerimin , kelime ayırıcı olarak -alt çizgi yerine kısa çizgi kullanmasını istiyorum _. Örneğin controller/my-actionyerine controller/my_action.

İki şeye şaşırdım:

  1. Google ve ark. onları ayırt etmeye devam edin.
  2. Ruby on bir basit olmadığını, global konfigürasyon parametresi haritaya -göre _yönlendirme. Yoksa öyle mi?

En iyi çözüm, kullanmak :asya da adlandırılmış bir yol.

Benim fikrim bu küresel yapılandırma ve değişim kontrol etmek yönlendirme Rails değiştirmektir -için _bir kontrolör eylemine gönderme önce.

Daha iyi bir yol var mı?


Ayrıca, url'lerde (html / css öğe kimlikleri, adlar ve sınıflarda olduğu gibi) alt çizgi yerine tireleri tercih ederim, ancak bunu uygulamaya çalışmadım. Önce raylar 3'e geçecek ve sonra bunun için endişelenecektim çünkü raylar 3, ara katman yazılımı ve yönlendirmeye yönelik çok sayıda sert yükseltmeye sahip.
yfeldblum

Teşekkürler Adalet. Yükseltme yapana ve v3'e alışana kadar bekletirim.
pduey

Yanıtlar:


74

Rails 3 ve sonraki sürümleri ile şunları yapabilirsiniz:

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

Diğer bir seçenek, bir başlatıcı aracılığıyla Rails'i değiştirmektir. Gelecekteki sürümlerde bozulabileceği için bunu önermiyorum (düzenleme: Rails 5'te çalışmıyor).

:pathYukarıda gösterildiği gibi kullanmak daha iyidir.

# 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
Rails'te yepyeni biriyim. Bunun gibi bir satırı hangi dosyaya eklersiniz?
Alan W. Smith

5
alt çizgiye sahip tüm rotaları kısa çizgiye dönüştürmenin daha iyi ve daha hızlı bir yolu olmalı
carbonr

2
@carbonr az önce eklediğim örneğe ne dersiniz? :)
sandstrom

@sandstrom işte bu! tatlı!
carbonr

3
Ne yazık ki bu maymun yaması artık Rails 5'te çalışmıyor. Bu, alt çizgi olarak kalacak ve kötü hatalar yaratacak #index ve #create dışındaki her şeyi kontrol edecek. Herhangi birinin Rails 5 için güncellenmiş bir komut dosyası varsa, çok memnun olur.
Kelsey Hannan

4

Çizgileri kullanmak için denetleyiciyi ve eylem adlarını aşırı yükleyebilirsiniz:

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

Konsolda test edebilirsiniz:

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

2

Adlandırılmış rotaları kullanabilirsiniz. Kelime ayırıcı olarak '-' kullanımına izin verecektir. Rotalarda.rb,

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

Şimdi http: // my_application / abc gibi url'ler belirtilen denetleyiciye ve eyleme gider.

Ayrıca dinamik url oluşturmak için

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

bu durumda 'id1, id2 & id2, eyleme http parametreleri olarak geçirilir

Eylemlerinizde ve görüşlerinizde,

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

' http: // uygulamam / val1-val2-val3 ' url'si olarak değerlendirilir .


3
Yönlendirmenin manuel bakımından kaçınmak istiyorum, bu nedenle adlandırılmış yollar yok. Ben sadece ray yönlendirmesinin benim için yerini almasını ve yapılandırma dosyalarımı sıkı tutmasını istiyorum.
pduey

2

Bir denetleyicide alt çizgi kullanır ve dosyayı görüntülerseniz, rotalar dosyanızda kısa çizgiler kullanın ve işe yarayacaktır ..

'blog / example-text' alın bu denetleyici için benim rotam bu

def example_text end <- bu benim denetleyicim

ve example_text.html.erb dosya

ve bu gerçek bağlantı site.com/blog/example-text

Bunun benim için işe yaradığını düşündüm ve SEO açısından altını çizmekten daha etkili

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.