Saya ingin url saya menggunakan tanda hubung -
alih-alih garis bawah _
sebagai pemisah kata. Misalnya, controller/my-action
bukan controller/my_action
.
Saya terkejut tentang dua hal:
- Google dkk. terus bedakan mereka.
- Itu Ruby on Rails tidak memiliki sederhana, parameter konfigurasi global untuk memetakan
-
ke_
dalam routing. Atau apakah itu?
Solusi terbaik yang pernah saya gunakan adalah menggunakan :as
atau rute bernama.
Ide saya adalah untuk memodifikasi Rails routing ke memeriksa bahwa konfigurasi global dan perubahan -
untuk _
sebelum pengiriman ke aksi kontroler.
Apakah ada cara yang lebih baik?
Jawaban:
Dengan Rails 3 dan yang lebih baru, Anda dapat melakukan seperti ini:
resources :user_bundles, :path => '/user-bundles'
Pilihan lainnya adalah memodifikasi Rails, melalui penginisialisasi. Saya tidak merekomendasikan ini, karena mungkin rusak di versi mendatang (edit: tidak berfungsi di Rails 5).
Menggunakan
:path
seperti yang ditunjukkan di atas lebih baik.# 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
sumber
Anda dapat membebani pengontrol dan nama tindakan untuk menggunakan tanda hubung:
# config/routes.rb resources :my_resources, path: 'my-resources' do collection do get 'my-method', to: :my_method end end
Anda dapat menguji di konsol:
rails routes -g my_resources my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method
sumber
Anda dapat menggunakan rute bernama. Ini akan memungkinkan penggunaan '-' sebagai pemisah kata. Di routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Sekarang url seperti http: // my_application / abc akan menuju ke controller dan action yang ditentukan.
Juga, untuk membuat url dinamis
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
dalam hal ini 'id1, id2 & id2 akan diteruskan sebagai http params ke tindakan
Dalam tindakan dan pandanganmu,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
akan mengevaluasi ke url ' http: // my_application / val1-val2-val3 '.
sumber
jika Anda menggunakan garis bawah di pengontrol dan melihat file maka cukup gunakan tanda hubung di file rute Anda, dan itu akan berfungsi ..
dapatkan 'blog / example-text' ini adalah rute saya untuk pengontrol ini
def example_text end <- ini adalah pengontrol saya
dan example_text.html.erb adalah filenya
dan ini adalah tautan sebenarnya site.com/blog/example-text
Saya pikir ini berhasil untuk saya, dan itu lebih efektif daripada menggarisbawahi SEO
sumber