Скажіть, у мене є модель рейки під назвою Thing. У Thing є атрибут url, який за бажанням можна встановити за URL-адресою десь в Інтернеті. Для перегляду коду, мені потрібна логіка, яка робить наступне:
<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Ця умовна логіка в погляді потворна. Звичайно, я міг би побудувати функцію помічника, яка змінила б погляд на це:
<%= thing_link('Text', thing) %>
Це вирішує проблему багатозначності, але я б волію функціонувати в самій моделі. У такому випадку код перегляду буде таким:
<%= link_to('Text', thing.link) %>
Це, очевидно, вимагало б методу зв'язку на моделі. Ось що воно повинно містити:
def link
(self.url.blank?) ? thing_path(self) : self.url
end
До питання, thing_path () - це не визначений метод всередині коду Model. Я припускаю, що можна «втягнути» деякі допоміжні методи в модель, але як? І чи є реальна причина, що маршрутизація працює лише на контролері та переглядає шари програми? Я можу придумати безліч випадків, коли модельний код, можливо, повинен мати справу з URL-адресами (інтеграція із зовнішніми системами тощо).