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('_', ' ').titleizepara obtener "compradores de casas".new.controller_name.classify.constantizeen la definición de clase.Si su controlador y modelo están en el mismo espacio de nombres, entonces lo que quiere es
controller_pathte da el espacio de nombres;controller_nameno 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