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
fonte
fonte
controller_name.sub('_', ' ').titleize
para obter "compradores de casa".new.controller_name.classify.constantize
na definição da classe.Se o seu controlador e modelo estão no mesmo namespace, então o que você quer é
controller_path
fornece o namespace;controller_name
não.Por exemplo, se o seu controlador é
então:
fonte
É um pouco hackeado, mas se o nome do seu modelo for o nome do controlador:
... daria a você "HouseBuyer" em sua variável de instância @model_name.
Novamente, isso faz uma grande suposição de que "HouseBuyersController" só lida com modelos "HouseBuyer".
fonte
Para namespaces funcionando:
fonte
Isso não é possível se você estiver usando o MVC padrão, que seu código parece não seguir. Seu controlador parece ser um modelo, mas talvez você só tenha um tipo aí. De qualquer forma, controladores e modelos são fundamentalmente separados no Rails MVC, então os controladores não podem saber a qual modelo estão associados.
Por exemplo, você pode ter um modelo chamado post. Isso pode ter um controlador posts_controller ou pode ter um controlador como o articles_controller. O Rails só conhece os modelos quando você define o código real no controlador, como
Em controladores padrão rails não há como saber qual é o modelo.
fonte
A solução aceita não funcionou para mim, pois meu controlador e modelo tinham namespace. Em vez disso, criei o seguinte método:
fonte