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
la source
la source
controller_name.sub('_', ' ').titleize
pour obtenir des «acheteurs de maison».new.controller_name.classify.constantize
dans la définition de classe.Si votre contrôleur et votre modèle sont dans le même espace de noms, alors ce que vous voulez est
controller_path
vous donne l'espace de noms;controller_name
pas.Par exemple, si votre contrôleur est
puis:
la source
C'est un peu un hack, mais si votre modèle est nommé d'après le nom de votre contrôleur, alors:
... vous donnerait "HouseBuyer" dans votre variable d'instance @model_name.
Encore une fois, cela suppose que "HouseBuyersController" ne traite que des modèles "HouseBuyer".
la source
Pour les espaces de noms fonctionnant:
la source
Cela n'est pas possible si vous utilisez le MVC par défaut, que votre code ne semble pas suivre. Votre contrôleur semble être un modèle, mais peut-être que vous venez d'en avoir un type. Quoi qu'il en soit, les contrôleurs et les modèles sont fondamentalement séparés dans Rails MVC afin que les contrôleurs ne puissent pas savoir à quel modèle ils sont associés.
Par exemple, vous pourriez avoir un modèle nommé post. Cela peut avoir un contrôleur posts_controller ou pourrait avoir un contrôleur comme articles_controller. Rails ne connaît les modèles que lorsque vous définissez le code réel dans le contrôleur tel que
Dans les contrôleurs standard de rails, il n'y a aucun moyen de savoir quel est le modèle.
la source
La solution acceptée ne fonctionnait pas pour moi car mon contrôleur et mon modèle étaient à espace de noms. Au lieu de cela, j'ai proposé la méthode suivante:
la source