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
Answers:
这样做:
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
在类定义中使用。
如果您使用的是默认的MVC,这似乎是不可能的,但是您的代码似乎并不遵循。您的控制器似乎是一个模型,但也许您只是那里有一个类型。无论如何,在Rails MVC中,控制器和模型从根本上是分开的,因此控制器无法知道它们与哪个模型关联。
例如,您可能有一个名为post的模型。这可以有一个控制器posts_controller,也可以有一个类似articles_controller的控制器。当您在控制器中定义实际代码时,Rails仅了解模型
def index
@posts = Post.all
@posts = Article.all
end
在Rails标准控制器中,无法知道模型是什么。