ruby on rails रेल में नियंत्रक से link_to कैसे मिलाएं और कॉल करें?




ruby-on-rails helpers (4)

यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है लेकिन एक आसान तरीका है

रेल 3 और 4 के लिए , चूंकि आप एक नियंत्रक से सहायक का उपयोग कर रहे हैं आप view_context का उपयोग कर सकते हैं

# in the controller code
view_context.link_to '...', '...'

# instead of using your mixin code 
link_to '...', '...'

रेल 2 के लिए , चूंकि आप एक नियंत्रक से सहायक का उपयोग कर रहे हैं, आप वास्तव में नियंत्रक के @template सदस्य चर का उपयोग कर सकते हैं, @template दृश्य है और पहले से ही UrlHelper मिला हुआ है

# in the controller code
@template.link_to '...', '...'

# instead of using your mixin code 
link_to '...', '...'

यदि आपको कंट्रोलर के अलावा कोड से urlhelper का उपयोग करने की आवश्यकता है, तो आपका समाधान संभवतः जाने का रास्ता है

यह एक नॉब प्रश्न की तरह लगता है, लेकिन सरल उत्तर मुझे परेशान कर रहा है। मुझे एक HTML लिंक बाहर थूकने के लिए एक ActionController विधि में ActionController को कॉल करने की आवश्यकता है। ActionView::Helpers::UrlHelper.link_to url_for कॉल url_for , लेकिन यह नियंत्रक के बजाय AV मॉड्यूल के संस्करण को कॉल करता है। मैं इसमें वह करने में कामयाब रहा जो मैंने डालकर किया था

  #FIXME there must be a better way to mixin link_to
  alias_method :self_url_for, :url_for
  include ActionView::Helpers::UrlHelper
  alias_method :url_for, :self_url_for

नियंत्रक में। लेकिन, मुझे अभी भी यकीन नहीं है कि यह वास्तव में क्यों काम करता है। किसी को कृपया विधि गुंजाइश और छुपा है कि यहाँ हो रहा है समझा सकता है? link_to में मिश्रण करने का एक बेहतर तरीका क्या है (या आमतौर पर, मॉड्यूल से केवल कुछ विधियों को शामिल करने के लिए), इसलिए मैं इसे नियंत्रक में कॉल कर सकता हूं (लिंक के साथ एक फ्लैश स्ट्रिंग का उपयोग करना उपयोग मामला है।)

कृपया, MVC के बारे में कोई व्याख्यान नहीं - यदि कुछ भी हो, तो url_for एक मॉड्यूल में url_for से अलग होना चाहिए। इस पर शोर की मात्रा को देखते हुए, बहुत से लोग इस प्रतीत होता है कि मामूली झपकी लेते हैं और एक घंटे को बर्बाद करते हुए इसे "रेल रास्ता" बनाते हैं जब वास्तव में जो चाहता है वह मेरे ऐप को काम करने के लिए एक मिनट की हैक है। क्या शायद सहायकों के साथ ऐसा करने के लिए "रेल रास्ता" है? या एक बेहतर माणिक तरीका?


आप इसे इस तरह से कर सकते हैं:

ActionController.helpers.link_to("Click Me!", awesome_path)

लेकिन वास्तव में, उस लिंक को उत्पन्न करने के लिए एक बेहतर स्थान एक सहायक मॉड्यूल में हो सकता है जहां UrlHelper और अन्य दृश्य-संबंधी सहायक पहले से ही शामिल हैं।

[अद्यतन करें]

यह दृष्टिकोण पुराना है और अब काम नहीं करता है।


रेल के साथ संगत 3,4 और 5:

view_context.link_to

मुझे अभी भी अपने स्वयं के सहायक तरीकों का उपयोग करने में समस्या थी जो एक्शनकंट्रोलर.हेलपर.मे_मेथोड के साथ कंट्रोलर में निर्मित सहायक विधियों का उपयोग करती है।

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

मेरा समाधान एक आंशिक में कोड निष्पादित करने के लिए नियंत्रकों के लिए थोड़ा सहायक बनाने का था।

नियंत्रक में सहायक विधि:

def h(&block)
  render_to_string(:partial => 'helper', :locals => {:block => block})
end

HAML आंशिक (हेल्पर.html.haml):

= instance_eval &block 

उसी ERB (helper.html.erb) में काम करेगा:

<%= instance_eval &block %>

अपने नियंत्रक में my_custom_helper_function को कॉल करने के लिए इसे इस तरह से उपयोग करें जिसे एक सहायक में परिभाषित किया गया है:

redirect_to url, :notice => h{my_custom_helper_function}




mixins