2011-05-20 12 views
45

मेरे पास एक फ़ंक्शन वाला मॉड्यूल है। यह /lib/contact.rb में रहता है:रेल मॉड्यूल से URL सहायक का उपयोग कैसे करें

module Contact 
    class << self 
    def run(current_user) 
     ... 
    end 
    end 
end 

मैं मॉड्यूल के अंदर 'users_path' की तरह यूआरएल सहायकों का उपयोग करना चाहते हैं। मैं उसको कैसे करू?

+1

संभावित डुप्लिकेट [क्या रेलवे रूटिंग हेल्पर्स (यानी mymodel \ _path (मॉडल)) मॉडल में उपयोग किया जा सकता है?] (Http://stackoverflow.com/questions/341143/can-rails-routing-helpers-ie -mymodel-pathmodel-be-used-in-model) –

उत्तर

84

अपने मॉड्यूल में, सिर्फ एक प्रदर्शन:

include Rails.application.routes.url_helpers 
+0

धन्यवाद, ऐसा हुआ! – sizzle

+0

खुशी ... ;-) – ronnieonrails

+2

मेरे लिए काम नहीं करता है ... :(क्या आप अधिक जानकारी दे सकते हैं, कृपया? –

24

url_helpers के प्रतिनिधिमंडल अपने मॉडल में पूरे मॉड्यूल सहित तुलना में काफी बेहतर रहा है

delegate :url_helpers, to: 'Rails.application.routes' 
url_helpers.users_url => 'www.foo.com/users' 

reference

+0

मेरे लिए काम नहीं करता है ... :( –

+0

'url_helpers'' url_helper' नहीं होना चाहिए, मुझे लगता है। – davmac

+0

हाय वहाँ, आप कैसे जानते थे कि यह Rails.application.routes था url_helpers को सौंप दिया जाना चाहिए? आपको यह दस्तावेज कहां मिल रहा है? धन्यवाद! –

23

यहाँ मैं कैसे करना है यह include

के बिना किसी भी संदर्भ में 210
routes = Rails.application.routes.url_helpers 
url = routes.some_path 

यह किसी भी संदर्भ में काम करता है। यदि आप include url_helpers की कोशिश कर रहे हैं - सुनिश्चित करें कि आप इसे सही जगह पर कर रहे हैं उदा। इस

module Contact 
    class << self 
    include Rails.application.routes.url_helpers 
    end 
end 

काम करता है और इस

module Contact 
    include Rails.application.routes.url_helpers 
    class << self 
    end 
end 

एक और उदाहरण काम नहीं करता है Capybara साथ परीक्षण

feature 'bla-bla' do 
    include Rails.application.routes.url_helpers 
    path = some_path #unknown local variable some_path 
end 

और अब सही

include Rails.application.routes.url_helpers 
feature 'bla-bla' do 
    path = some_path #this is ok 
end 
3
delegate :url_helpers, to: 'Rails.application.routes' 
url_helpers.users_url => 'www.foo.com/users' 

ऑगस्टिन Riedinger को, कि प्रतिनिधिमंडल कोड अन्यथा आप

अपरिभाषित विधि `मिल 'url_helper

2

मैं ब्योरा सहायक उम्मीद कर रही है के साथ संघर्ष कर रहा है, url_helpers (बहुवचन) का उल्लेख करने की जरूरत है डिफ़ॉल्ट नियंत्रक और ढेर से (default_url_options, आदि), और मेजबान हार्डकोड नहीं करना चाहता था।

हमारे URL सहायकों ज़ाहिर है, हमारे गंधा मॉड्यूल द्वारा प्रदान की जाती हैं:

include Rails.application.routes.url_helpers 

लेकिन शामिल इस रूप में है, और (1) सहायक default_url_options देखने के लिए जा रहा है, और (2) नहीं होगा अनुरोध मेजबान और न ही अनुरोध के बारे में जानें।

होस्ट हिस्सा नियंत्रक इंस्टेंस के url_options से आता है। इसलिए, मैं नियंत्रक संदर्भ मेरी पूर्व मॉड्यूल में अब एक वर्ग पारित,:

class ApplicationController 
    def do_nifty_things 
    HasAccessToRoutes.new(self).render 
    end 
end 

class HasAccessToRoutes 
    include Rails.application.routes.url_helpers 
    delegate :default_url_options, :url_options, to: :@context 

    def initialize(context) 
    @context = context 
    end 

    def render 
    nifty_things_url 
    end 
end 

हर मामले में फिट नहीं सकता है, लेकिन यह मेरे लिए उपयोगी हो गया है जब कस्टम रेंडरर का एक तरह लागू करने।

किसी भी तरह से:

  • आप मूल डिफ़ॉल्ट यूआरएल विकल्पों तक पहुंच, या अनुरोध के मेजबान चाहते हैं तो आपको
  • में नियंत्रक/अनुरोध संदर्भ पारित करने के लिए अगर आप सिर्फ पथ की जरूरत की जरूरत है , कोई मेजबान नहीं है, और यूआरएल विकल्पों की परवाह नहीं है, आप बस कुछ डमी तरीके बना सकते हैं।
संबंधित मुद्दे