Mis*_*hko 94 ruby-on-rails ruby-on-rails-3
class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
Run Code Online (Sandbox Code Playgroud)
mal*_*cke 184
这样做:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
Run Code Online (Sandbox Code Playgroud)
在抽象控制器操作时经常需要这样做:
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
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 36
如果您的控制器和模型位于同一名称空间中,那么您想要的是什么
controller_path.classify
Run Code Online (Sandbox Code Playgroud)
controller_path给你命名空间; controller_name没有.
例如,如果您的控制器是
Admin::RolesController
Run Code Online (Sandbox Code Playgroud)
然后:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
Run Code Online (Sandbox Code Playgroud)
这有点像黑客,但如果您的模型以您的控制器名称命名,那么:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
Run Code Online (Sandbox Code Playgroud)
...会在你的@model_name实例变量中给你"HouseBuyer".
再次,这是一个巨大的假设,"HouseBuyersController"只处理"HouseBuyer"模型.
| 归档时间: |
|
| 查看次数: |
42389 次 |
| 最近记录: |