2011-11-22 16 views
28

यदि मेरे पास एक अलग नियंत्रक में एक विधि है जिसमें मैं लिख रहा हूं, और मैं उस विधि को कॉल करना चाहता हूं, तो यह संभव है, या मुझे उस विधि को उस पर ले जाने पर विचार करना चाहिए सहायक?किसी अन्य नियंत्रक से एक विधि को कॉल करना

+1

क्या आप किसी अन्य नियंत्रक की विधि को कॉल करके हल करने के लिए समस्या को जोड़ सकते हैं? वर्तमान में यह बहुत अस्पष्ट है, और समाधान समस्या पर निर्भर करेगा। – mliebelt

+0

दरअसल, कृपया बताएं कि आप क्या हल करने की कोशिश कर रहे हैं। साझा विधि क्या कर रही है? – nathanvda

उत्तर

45

आप तकनीकी रूप से उस पर अन्य नियंत्रक और कॉल विधियों का एक उदाहरण बना सकते हैं, लेकिन यह कठिन है, त्रुटि प्रवण और अत्यधिक अनुशंसित नहीं है।

यदि यह फ़ंक्शन दोनों नियंत्रकों के लिए आम है, तो शायद आपको ApplicationController या आपके निर्माण के एक अन्य सुपरक्लस नियंत्रक में होना चाहिए।

class ApplicationController < ActionController::Base 
    def common_to_all_controllers 
    # some code 
    end 
end 

class SuperController < ApplicationController 
    def common_to_some_controllers 
    # some other code 
    end 
end 

class MyController < SuperController 
    # has access to common_to_all_controllers and common_to_some_controllers 
end 

class MyOtherController < ApplicationController 
    # has access to common_to_all_controllers only 
end 

फिर भी एक और तरीका यह करने के लिए के रूप में jimworm का सुझाव दिया, आम कार्यक्षमता के लिए एक मॉड्यूल का उपयोग करने के लिए है।

# lib/common_stuff.rb 
module CommonStuff 
    def common_thing 
    # code 
    end 
end 

# app/controllers/my_controller.rb 
require 'common_stuff' 
class MyController < ApplicationController 
    include CommonStuff 
    # has access to common_thing 
end 
+5

या एक 'मॉड्यूल' से शामिल है। – jimworm

+0

'GoodSuggestion शामिल करें' धन्यवाद @ jimworm – edgerunner

+1

अन्य नियंत्रक का एक उदाहरण बनाना ???? Arrrrrrgggh (वास्तव में)। एक और विकल्प, चूंकि सवाल इतना अस्पष्ट है: मॉडलों को कोड ले जाएं। – nathanvda

2

प्रयास करें और उत्तरोत्तर आप अपने मॉडल के लिए तरीकों के लिए कदम अगर वे एक मॉडल तो एक सहायक पर लागू नहीं हैं और यह अभी भी पहुँचा कहीं ApplicationController

+1

मैं कभी भी नियंत्रक से कोड को एक सहायक में नहीं ले जाऊंगा, बल्कि '/ lib' में रहने वाले मॉड्यूल के बजाय। केवल देखने-कोड को सहायक में रहना चाहिए। – nathanvda

+1

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

+1

मैं सहायकों पर मॉड्यूल का उपयोग करना पसंद करता हूं, क्योंकि वे सच हैं ओओ, मैं उन्हें इच्छानुसार शामिल/विस्तारित कर सकता हूं। मैं सामान को एक साथ समूहित कर सकता हूं जिसका वास्तविक अर्थ है। हेल्पर्स सिर्फ बाल्टी हैं। मैं केवल उनसे संबंधित तरीकों के लिए उपयोग करने की सलाह देता हूं। सुनिश्चित नहीं है कि आप 'बिंदु पर पहुंच जाएंगे' के साथ आपका क्या मतलब है। – nathanvda

0

मैं नहीं में डाल करने की जरूरत है अपनी समस्या के बारे में कोई जानकारी जानिए, लेकिन शायद आपके मामले में पथ समाधान हो सकते हैं (विशेष रूप से यदि इसकी रीस्टफुल एक्शन)।

http://guides.rubyonrails.org/routing.html#paths-and-urls

0

आप आवश्यकता कुछ डीबी संचालन से संबंधित है, तो आप एक आम समारोह (वर्ग विधि) कि मॉडल के अंदर लिख सकते हैं। मॉडल के अंदर परिभाषित कार्य सभी नियंत्रकों के लिए सुलभ हैं। लेकिन यह समाधान सभी मामलों पर लागू होता है।

संबंधित मुद्दे