Diyelim ki Thing isimli bir Rails Modelim var. Şey, isteğe bağlı olarak İnternet'in herhangi bir yerinde bir URL'ye ayarlanabilen bir url özelliğine sahiptir . Görünüm kodunda, ben aşağıdakileri yapan mantık gerekir:
<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Görünümdeki bu koşullu mantık çirkin. Tabii ki, görünümü bu şekilde değiştirecek bir yardımcı işlev inşa edebilirim:
<%= thing_link('Text', thing) %>
Bu, ayrıntı problemini çözer, ancak modelin kendisinde işlevselliğe sahip olmayı gerçekten tercih ederim. Bu durumda, görünüm kodu şöyle olur:
<%= link_to('Text', thing.link) %>
Bu, açıkça, model üzerinde bir bağlantı yöntemi gerektirecektir. Aşağıdakileri içermesi gerekir:
def link
(self.url.blank?) ? thing_path(self) : self.url
end
Sorunun noktasına gelindiğinde thing_path (), Model kodu içinde tanımsız bir yöntemdir. Bazı yardımcı yöntemleri modele "çekmek" mümkün olduğunu varsayıyorum, ama nasıl? Yönlendirmenin yalnızca denetleyicide çalışmasının ve uygulamanın katmanlarını görüntülemesinin gerçek bir nedeni var mı? Model kodunun URL'lerle (harici sistemlerle entegrasyon vb.) Uğraşması gerekebilecek birçok durumu düşünebilirim.