कहते हैं मेरे पास एक रेलिंग मॉडल है जिसे थिंग कहा जाता है। थिंग में एक 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 () मॉडल कोड के अंदर एक अपरिभाषित विधि है। मैं मान रहा हूँ कि मॉडल में कुछ सहायक विधियों को "खींचना" संभव है, लेकिन कैसे? और क्या कोई वास्तविक कारण है कि रूटिंग केवल ऐप के कंट्रोलर और व्यू लेयर्स पर काम करता है? मैं बहुत सारे मामलों के बारे में सोच सकता हूं जहां मॉडल कोड को यूआरएल (बाहरी प्रणालियों के साथ एकीकरण, आदि) से निपटने की आवश्यकता हो सकती है।