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
Yanıtlar:
Bunu yapacak:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
Bu genellikle denetleyici eylemlerini soyutlarken gereklidir:
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
"Ev Alıcıları" almak için yapabilirsiniz .
new.controller_name.classify.constantize
Sınıf tanımında kullanabilirsiniz .
Denetleyiciniz ve modeliniz aynı ad alanındaysa, istediğiniz şey
controller_path.classify
controller_path
size ad alanını verir; controller_name
değil.
Örneğin, denetleyiciniz
Admin::RolesController
sonra:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
Bu biraz hack, ancak modelinizin adı kontrol cihazınızın adıyla alınıyorsa:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
... size @model_name örnek değişkeninizde "HouseBuyer" verir.
Yine, bu "HouseBuyersController" ın yalnızca "HouseBuyer" modelleriyle ilgilendiğini varsayar.
Kodunuzun takip etmediği varsayılan MVC'yi kullanıyorsanız bu mümkün değildir. Denetleyiciniz bir model gibi görünüyor ama belki de orada bir tipiniz var. Her neyse, denetleyiciler ve modeller Rails MVC'de temelde ayrılmıştır, bu nedenle denetleyiciler hangi modelle ilişkili olduklarını bilemezler.
Örneğin, post adında bir modeliniz olabilir. Bunun bir post_controller denetleyicisi olabilir veya makaleler_controller gibi bir denetleyiciye sahip olabilir. Rails, yalnızca denetleyicideki gerçek kodu tanımladığınızda, örneğin
def index
@posts = Post.all
@posts = Article.all
end
Raylarda standart kontrolörlerde modelin ne olduğunu bilmenin bir yolu yoktur.