Thing이라는 Rails 모델이 있다고 가정 해 봅시다. 사물은 인터넷 어딘가에 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 ()는 모델 코드 내에서 정의되지 않은 메소드입니다. 일부 도우미 메서드를 모델에 "풀인"할 수 있다고 가정하지만 어떻게? 라우팅이 컨트롤러에서만 작동하고 앱의 레이어를 보는 실제적인 이유가 있습니까? 모델 코드가 URL을 처리해야하는 경우 (외부 시스템과의 통합 등)를 생각할 수 있습니다.