class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
जवाबों:
यह यह करेगा:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
नियंत्रक क्रियाओं को अमूर्त करते समय इसकी अक्सर आवश्यकता होती है:
class HouseBuyersController < ApplicationController
def index
# Equivalent of @house_buyers = HouseBuyer.find(:all)
objects = controller_name.classify.constantize.find(:all)
instance_variable_set("@#{controller_name}", objects)
end
end
controller_name.sub('_', ' ').titleize
"हाउस बायर्स" प्राप्त करने के लिए कर सकते हैं ।
new.controller_name.classify.constantize
वर्ग परिभाषा में उपयोग कर सकते हैं ।
यदि आपका कंट्रोलर और मॉडल एक ही नाम स्थान पर हैं, तो आप क्या चाहते हैं
controller_path.classify
controller_path
आपको नामस्थान देता है; controller_name
ऐसा नहीं करता।
उदाहरण के लिए, यदि आपका नियंत्रक है
Admin::RolesController
फिर:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
यह थोड़ा हैक है, लेकिन यदि आपके मॉडल का नाम आपके नियंत्रक के नाम पर है तो:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
... आप अपने @model_name उदाहरण चर में "हाउसबियर" देंगे।
फिर, यह एक बहुत बड़ी धारणा बनाता है कि "हाउसबॉयर्सकंट्रोलर" केवल "हाउसबियर" मॉडल के साथ काम करता है।
यदि आप डिफ़ॉल्ट MVC का उपयोग कर रहे हैं, तो यह संभव नहीं है, जिसे आपका कोड अनुसरण नहीं करता है। आपका नियंत्रक एक मॉडल प्रतीत होता है, लेकिन हो सकता है कि आपको वहां एक प्रकार मिले। वैसे भी, नियंत्रकों और मॉडलों को मूल रूप से रेल एमवीसी में अलग किया जाता है ताकि नियंत्रक यह नहीं जान सकें कि वे किस मॉडल से जुड़े हैं।
उदाहरण के लिए आपके पास एक मॉडल हो सकता है जिसका नाम पोस्ट है। इसमें एक कंट्रोलर पोस्ट_कंट्रोलर हो सकता है या आर्टिकल_कंट्रोलर जैसा कंट्रोलर हो सकता है। जब आप नियंत्रक जैसे वास्तविक कोड को परिभाषित करते हैं, तो केवल मॉडल के बारे में पता होता है
def index
@posts = Post.all
@posts = Article.all
end
रेल मानक नियंत्रकों में यह जानने का कोई तरीका नहीं है कि मॉडल क्या है।