class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
ruby-on-rails
ruby-on-rails-3
Misha Moroshko
fuente
fuente
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
te da el espacio de nombres;controller_name
no lo hace.Por ejemplo, si su controlador es
luego:
fuente
Es un truco, pero si su modelo lleva el nombre del controlador, entonces:
... 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".
fuente
Para espacios de nombres que funcionan:
fuente
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
En los controladores estándar de rieles no hay forma de saber cuál es el modelo.
fuente
La solución aceptada no funcionó para mí ya que mi controlador y modelo tenían un espacio de nombres. En cambio, se me ocurrió el siguiente método:
fuente