Nói rằng tôi có một mô hình Rails được gọi là Thing. Điều có một thuộc tính url có thể tùy ý được đặt thành một URL ở đâu đó trên Internet. Trong mã xem, tôi cần logic thực hiện như sau:
<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Logic có điều kiện này trong quan điểm là xấu xí. Tất nhiên, tôi có thể xây dựng một hàm trợ giúp, điều này sẽ thay đổi khung nhìn này:
<%= thing_link('Text', thing) %>
Điều đó giải quyết vấn đề dài dòng, nhưng tôi thực sự muốn có chức năng trong chính mô hình. Trong trường hợp đó, mã xem sẽ là:
<%= link_to('Text', thing.link) %>
Điều này, rõ ràng, sẽ yêu cầu một phương pháp liên kết trên mô hình. Đây là những gì nó cần để chứa:
def link
(self.url.blank?) ? thing_path(self) : self.url
end
Theo quan điểm của câu hỏi, thing_path () là một phương thức không xác định bên trong mã Model. Tôi cho rằng có thể "kéo" một số phương thức trợ giúp vào mô hình, nhưng bằng cách nào? Và có một lý do thực sự rằng định tuyến chỉ hoạt động tại bộ điều khiển và xem các lớp của ứng dụng? Tôi có thể nghĩ ra rất nhiều trường hợp mã mô hình có thể cần xử lý URL (tích hợp với các hệ thống bên ngoài, v.v.).