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
Respuestas:
Esto lo hará:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
Esto suele ser necesario cuando se abstraen las acciones del controlador:
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
para obtener "compradores de casas".
new.controller_name.classify.constantize
en la definición de clase.
Si su controlador y modelo están en el mismo espacio de nombres, entonces lo que quiere es
controller_path.classify
controller_path
te da el espacio de nombres; controller_name
no lo hace.
Por ejemplo, si su controlador es
Admin::RolesController
luego:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
Es un truco, pero si su modelo lleva el nombre del controlador, entonces:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
... le daría "HouseBuyer" en su variable de instancia @model_name.
Nuevamente, esto supone una gran suposición de que "HouseBuyersController" solo se ocupa de los modelos "HouseBuyer".
Esto no es posible si está utilizando el MVC predeterminado, que su código no parece seguir. Su controlador parece ser un modelo, pero tal vez solo tenga un tipo allí. De todos modos, los controladores y los modelos están fundamentalmente separados en Rails MVC, por lo que los controladores no pueden saber con qué modelo están asociados.
Por ejemplo, podría tener un modelo llamado publicación. Esto puede tener un controlador posts_controller o podría tener un controlador como articles_controller. Rails solo conoce los modelos cuando define el código real en el controlador, como
def index
@posts = Post.all
@posts = Article.all
end
En los controladores estándar de rieles no hay forma de saber cuál es el modelo.