กำหนดเส้นทางด้วย Dash `-` แทนขีดล่าง" _` ใน Ruby on Rails


88

ฉันต้องการให้ URL ของฉันใช้เส้นประ-แทนการขีดล่าง_เป็นตัวคั่นคำ ตัวอย่างแทนcontroller/my-actioncontroller/my_action

ฉันประหลาดใจเกี่ยวกับสองสิ่ง:

  1. Google และคณะ แยกแยะพวกเขาต่อไป
  2. นั่น Ruby on Rails ไม่ได้ง่าย, การกำหนดค่าพารามิเตอร์ทั่วโลกเพื่อ map -ไป_ในเส้นทาง หรือไม่?

ทางออกที่ดีที่สุดคือใช้:asหรือเส้นทางที่มีชื่อ

ความคิดของฉันคือการแก้ไขการกำหนดเส้นทาง Rails เพื่อตรวจสอบการกำหนดค่าส่วนกลางนั้นและเปลี่ยน-เป็น_ก่อนที่จะส่งไปยังแอ็คชันคอนโทรลเลอร์

มีวิธีที่ดีกว่า?


ฉันยังชอบขีดกลางเพื่อขีดล่างใน URL (เช่นเดียวกับในรหัสองค์ประกอบ html / css ชื่อและคลาส) แต่ฉันยังไม่ได้ลองนำไปใช้ ฉันจะย้ายไปที่ราง 3 ก่อนแล้วจึงกังวลเกี่ยวกับเรื่องนี้เนื่องจากราง 3 มีการอัปเกรดมิดเดิลแวร์และการกำหนดเส้นทางอย่างมาก
yfeldblum

ขอบคุณความยุติธรรม ฉันจะรอจนกว่าจะอัปเกรดและคุ้นเคยกับ v3
pduey

ดูบทความเกี่ยวกับเส้นทางยัติภังค์ในราง
Yarin

คำตอบ:


74

ด้วย Rails 3 และใหม่กว่าคุณสามารถทำได้ดังนี้:

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

อีกทางเลือกหนึ่งคือการปรับเปลี่ยน Rails ผ่านทาง initializer ฉันไม่แนะนำสิ่งนี้เนื่องจากอาจพังในเวอร์ชันอนาคต (แก้ไข: ใช้ไม่ได้ใน Rails 5)

ใช้:pathตามรูปด้านบนจะดีกว่า

# 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 คุณจะเพิ่มบรรทัดแบบนี้ลงในไฟล์อะไร
Alan

5
จะต้องมีวิธีที่ดีกว่าและเร็วกว่าในการแปลงเส้นทางทั้งหมดที่มีขีดล่างเป็นขีดกลาง
carbonr

2
@carbonr ตัวอย่างที่ฉันเพิ่งเพิ่มเข้าไปล่ะ? :)
sandstrom

@sandstrom นั่นแหละ! หวาน!
carbonr

3
น่าเสียดายที่แพตช์ลิงนี้ไม่สามารถใช้งานได้ใน Rails 5 อีกต่อไปสิ่งนี้จะทำให้ทุกอย่างถูกลบออกไปยกเว้น #index และ #create ซึ่งจะยังคงเป็นเครื่องหมายขีดล่างและสร้างข้อบกพร่องที่น่ารังเกียจ หากใครมีสคริปต์ที่อัปเดตสำหรับ Rails 5 จะได้รับการชื่นชมมาก
Kelsey Hannan

4

คุณสามารถโอเวอร์โหลดคอนโทรลเลอร์และชื่อการดำเนินการเพื่อใช้ขีดกลาง:

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

คุณสามารถทดสอบในคอนโซล:

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

2

คุณสามารถใช้เส้นทางที่ตั้งชื่อ จะอนุญาตให้ใช้ '-' เป็นตัวแยกคำ ใน route.rb,

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

ตอนนี้ URL เช่นhttp: // my_application / abcจะไปที่ตัวควบคุมและการดำเนินการที่ระบุ

นอกจากนี้สำหรับการสร้างไดนามิก URL

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

ในกรณีนี้ "id1, id2 & id2 จะถูกส่งผ่านเป็นพารามิเตอร์ http ไปยังการดำเนินการ

ในการกระทำและมุมมองของคุณ

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

จะประเมินเป็น url " http: // my_application / val1-val2-val3 "


3
ฉันต้องการหลีกเลี่ยงการบำรุงรักษาเส้นทางด้วยตนเองดังนั้นเส้นทางที่มีชื่อจึงไม่สามารถใช้งานได้ ฉันแค่ต้องการให้การกำหนดเส้นทางรางแทนการขายส่งและทำให้ไฟล์ config ของฉันแน่น
pduey

2

หากคุณใช้ขีดล่างในคอนโทรลเลอร์และดูไฟล์จากนั้นใช้เครื่องหมายขีดกลางในไฟล์เส้นทางของคุณก็จะใช้งานได้ ..

รับ "บล็อก / ตัวอย่างข้อความ" นี่คือเส้นทางของฉันสำหรับคอนโทรลเลอร์นี้

def example_text end <- นี่คือคอนโทรลเลอร์ของฉัน

และ example_text.html.erb คือไฟล์

และนี่คือลิงค์จริง site.com/blog/example-text

ฉันคิดว่าสิ่งนี้ใช้ได้ผลสำหรับฉันและมีประสิทธิภาพมากกว่าการเน้น SEO ที่ชาญฉลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.