Dire que j'ai un Rails de Modèle appelé Chose. Chose a un attribut url qui peut éventuellement être réglé à une URL quelque part sur Internet. Dans la vue de code, j'ai besoin d'une logique qui effectue les opérations suivantes:
<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Cette logique conditionnelle dans la vue, c'est moche. Bien sûr, je pourrais construire une fonction d'assistance, qui allait changer la vue de ceci:
<%= thing_link('Text', thing) %>
Qui résout le niveau de verbosité de problème, mais je préfère vraiment avoir la fonctionnalité dans le modèle lui-même. Dans ce cas, le code de la vue serait:
<%= link_to('Text', thing.link) %>
De toute évidence, cela nécessiterait une méthode de liaison sur le modèle. Voici ce qu'elle devrait contenir:
def link
(self.url.blank?) ? thing_path(self) : self.url
end
Le point de la question, thing_path() est une méthode non définie à l'intérieur d'un Modèle de code. Je suis en supposant qu'il est possible de "tirer" quelques méthodes d'aide dans le modèle, mais comment? Et est-il une vraie raison pour que le routage ne fonctionne qu'au contrôleur et vue couches de l'application? Je peux penser à beaucoup de cas où le code du modèle doivent traiter avec des Url (à l'intégration avec des systèmes externes, etc).