रूबी ऑन रेल्स में अंडरस्कोर `_` के बजाय डैश` -` के साथ रूट


88

मैं चाहता हूं कि मेरे यूआरएल शब्द विभाजक के रूप -में अंडरस्कोर के बजाय डैश का उपयोग करें _। के controller/my-actionबजाय उदाहरण के लिए controller/my_action

मैं दो चीजों के बारे में हैरान हूं:

  1. Google एट अल। उन्हें भेद करना जारी रखें।
  2. रूबी ऑन रेल्स के पास रूटिंग में मैप -करने के लिए एक सरल, वैश्विक कॉन्फ़िगरेशन पैरामीटर नहीं है _। या करता है?

सबसे अच्छा समाधान मैं उपयोग :asया एक नामित मार्ग है।

मेरा विचार उस वैश्विक कॉन्फ़िगरेशन की जांच करने के लिए राउटर रूटिंग को संशोधित करना और नियंत्रक कार्रवाई को भेजने से पहले बदलना -है _

क्या कोई बेहतर तरीका है?


मैं भी यूआरएल में अंडरस्कोर (साथ ही साथ html / css एलिमेंट आईडी, नाम, और क्लासेस) में डैश पसंद करता हूं, लेकिन मैंने इसे लागू करने की कोशिश नहीं की है। मैं पहले 3 रेल की ओर पलायन करूंगा और फिर इस बारे में चिंता करूंगा क्योंकि रेल 3 में मिडलवेयर और रूटिंग के लिए बहुत अधिक अपग्रेड है।
yfeldblum

धन्यवाद न्यायमूर्ति जब तक मैं अपग्रेड नहीं करूँगा और v3 से परिचित नहीं हो जाता हूँ, तब तक रुकूँगा।
pduey

जवाबों:


74

रेल 3 और बाद में आप इस तरह कर सकते हैं:

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

एक अन्य विकल्प एक इनिशलाइज़र के माध्यम से रेल को संशोधित करना है। हालांकि, मैं इसे भविष्य के संस्करणों में तोड़ सकता हूं, इसकी अनुशंसा नहीं करता (संपादित करें: रेल 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
मैं रेल के लिए नया हूँ। आप किस फ़ाइल को इस तरह से एक पंक्ति जोड़ेंगे?
एलन डब्ल्यू। स्मिथ

5
सभी मार्गों को बदलने के लिए एक बेहतर और तेज़ तरीका होना चाहिए, जिसमें हाइफ़न के लिए अंडरस्कोर है
कार्बोर

2
@carbonr मेरे द्वारा जोड़े गए उदाहरण के बारे में कैसे? :)
सैंडस्ट्रॉम

@sandstrom यह thats! मिठाई!
कार्बोर

3
अफसोस की बात यह है कि यह बंदर पटरी अब रेल 5 में काम नहीं करता है। यह #index और #create को छोड़कर हर चीज़ को डेशराइज़ करेगा, जो अंडरस्कोर जैसा रहेगा और नॉटी बग्स बनाएगा। अगर किसी के पास रेल्स 5 के लिए एक अद्यतन स्क्रिप्ट है, तो यह बहुत सराहना की जाएगी।
केल्सी हन्नान

3

आप डैश का उपयोग करने के लिए नियंत्रक और क्रिया नामों को अधिभारित कर सकते हैं:

# 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

आप नामित मार्गों का उपयोग कर सकते हैं। यह शब्द सेपरेटर के रूप में '-' का उपयोग करने की अनुमति देगा। मार्गों में।

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

अब http: // my_application / abc जैसे यूआरएल निर्दिष्ट नियंत्रक और कार्रवाई में जाएंगे।

इसके अलावा, गतिशील यूआरएल बनाने के लिए

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

इस स्थिति में 'id1, id2 & id2' ​​को कार्रवाई के लिए http params के रूप में पारित किया जाएगा

आप कार्यों और विचारों में,

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

मूल्यांकन करना होगा url ' http: // my_application / val1-val2-val3 '।


3
मैं मार्ग के मैनुअल रखरखाव से बचना चाहता हूं, इसलिए नामित मार्ग बाहर हैं। मैं बस चाहता हूं कि रेल मार्ग मेरे लिए रिप्लेसमेंट करे और मेरे कॉन्फिग फाइल्स को टाइट रखे।
pduey

2

यदि आप एक नियंत्रक और दृश्य फ़ाइल में अंडरस्कोर का उपयोग करते हैं तो बस अपने मार्गों फ़ाइल में डैश का उपयोग करें, और यह काम करेगा ।।

'ब्लॉग / उदाहरण-पाठ' प्राप्त करें यह इस नियंत्रक के लिए मेरा मार्ग है

def example_text end <- यह मेरा कंट्रोलर है

और example_text.html.erb फ़ाइल है

और यह वास्तविक लिंक site.com/blog/example-text है

मुझे लगा कि यह मेरे लिए काम कर रहा है, और यह अंडरस्कोर एसईओ से अधिक प्रभावी है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.