मैं ApplicationControllerकैसे मॉडल में ApplicationController में परिभाषित तरीकों
class ApplicationController < ActionController::Base
helper_method :get_active_gateway
def get_active_gateway(cart)
cart.account.gateways
end
end
में विधि को परिभाषित किया है जब मैं मॉडल
class Order < ActiveRecord::Base
def transfer
active= get_active_gateway(self.cart)
end
end
यह त्रुटि undefined local variable get_active_gateway
फेंकने में इस विधि बोल रहा हूँ कॉल करने के लिए।
तो मैं
class Order < ActiveRecord::Base
def transfer
active= ApplicationContoller.helpers.get_active_gateway(self.cart)
end
end
लिखा तो यह error undefined method nil for Nilclass
फेंक दिया गया था।
मैं रेल 3.2.0 में काम कर रहा हूं।
जैसा कि दो उत्तरों ने कहा था, आपको अपने मॉडल से नियंत्रक विधियों को कॉल नहीं करना चाहिए। यह अनुशंसित नहीं है। मॉडल व्यू कंट्रोलर (एमवीसी) में पढ़ें। चीजों को स्वतंत्र रखने के लिए। मूल रूप से भंडारण के लिए मॉडल वार्ता, मॉडल के लिए नियंत्रक वार्ता (अन्य तरीकों से नहीं), और नियंत्रक को बातचीत देखें। –
रेल डिज़ाइन के कारण, और ApplicationController.helpers (अब) को कॉल करने की क्षमता को हटाने के लिए, आपको मॉडल में डुप्लिकेट डीफ़ के साथ 'खुद को दोहराना' चाहिए। दोनों जगहों पर एक टिप्पणी जोड़ना सुनिश्चित करें ताकि यदि आप इसे एक बार में बदल दें, तो आपको जाना होगा और इसे दूसरे में बदलना होगा। – JosephK