Katakanlah saya punya Model Rails yang disebut Thing. Hal ini memiliki atribut url yang secara opsional dapat diatur ke URL di suatu tempat di Internet. Dalam kode tampilan, saya perlu logika yang melakukan hal berikut:
<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Logika kondisional dalam tampilan ini jelek. Tentu saja, saya bisa membangun fungsi pembantu, yang akan mengubah pandangan menjadi ini:
<%= thing_link('Text', thing) %>
Itu memecahkan masalah verbosity, tapi saya benar-benar lebih suka memiliki fungsi dalam model itu sendiri. Dalam hal ini, kode tampilan adalah:
<%= link_to('Text', thing.link) %>
Ini jelas membutuhkan metode tautan pada model. Inilah yang perlu dikandungnya:
def link
(self.url.blank?) ? thing_path(self) : self.url
end
Pada titik pertanyaan, thing_path () adalah metode yang tidak didefinisikan di dalam kode Model. Saya berasumsi bahwa mungkin untuk "menarik" beberapa metode pembantu ke dalam model, tetapi bagaimana caranya? Dan apakah ada alasan nyata bahwa perutean hanya beroperasi pada pengontrol dan melihat lapisan aplikasi? Saya dapat memikirkan banyak kasus di mana kode model mungkin perlu berurusan dengan URL (berintegrasi dengan sistem eksternal, dll).