2014-09-09 2 views
0

이것은 내 첫 번째 게시물입니다 .--)레일에서 메소드의 HTML을 반환하는 더 나은 방법은 무엇입니까?

현재 RoR (및 일반적인 프로그래밍 개념)의 로프를 배우고 있으며, 메소드에서 일부 데이터를 반환하는 방법이 ' 올바른 방법 '(또는 아마'레일 방식 ') 그렇게 할 수 있습니다.

사용자가 값을 입력 할 수있는 양식이 있고 내 '앱'이 요청 된 데이터를 외부 웹 서비스에서 폴링합니다. 그래서

<tr> 
<td>Subscriber</td> 
<%= is_subscribed?(@search_result.expiry) %> 
</tr> 

: 내보기에서

, 나는 포함하는 테이블 데이터 말했다 하나 개의 셀에 나는 다음과 같은 메소드의 호출을 포함 시켰습니다 :보기

추출물 이 작은 전화는 is_subscribed입니까? 아래에 따라 (나는 도우미에 저장 한) 방법 :

def is_subscribed?(sub_date) 
    if sub_date >= Date.today 
    return '<td class="text-success">Yes</td>'.html_safe 
    else 
    return '<td class="bg-danger">No</td>'.html_safe 
    end 
end 

비교의 결과에 따라, 나는 하나 개의 클래스와 값 또는 다른 클래스와 약간의 HTML과 약간의 HTML을 반환합니다.

위의 코드는 작동하며 클래스는 결과 HTML에 올바르게 적용됩니다. 내가 알고 싶은 것은이 일을하는 더 간단한 방법이 있는지, 이것이 나쁜 습관인지 여부입니다. 나는 또한 다른 사람들이 이런 종류의 일을 어떻게 처리 할까 궁금하다.

감사합니다.

+1

정직하게 말하면, 나는 당신의 것을 아주 가독성이 있다고 본다. mahemoff가 제안한 content_tag는 태그를 중첩해야 할 때 유용하며이 모든 연결을 수행하고 싶지 않습니다. – agmcleod

+0

"필기체"HTML은 사용자 입력과 혼합 할 때 나쁜 습관과 보안 문제가됩니다. 이 경우에는하지 않지만 모든 사용 사례에 대해 보안 조치가있는 도우미 메서드 사용을 권장하는 것이 좋습니다. – Jesper

답변

0

어떻게했는지는 괜찮습니다. 여기에 변형이있다 :

def subscribed_td(sub_date) 
    sub_date >= Date.today ? 
    content_tag(:td, 'Yes', class: 'text-success') : 
    content_tag(:td, 'No', class: 'bg-danger') 
end 

가장 큰 차이점은 단순히 함수 이름은 내가 부울을 반환 is_subscribed?를라는 함수를 예상대로, IMO에서 더 정확하다. content_tag을 좀 더 간결하게 사용하고 if-then (모든 사람의 취향이 아님) 대신 3 진을 사용합니다. 하나의 content_tag 표현식을 사용하여 여기에 공상을 불러 일으킬 수 있습니다. 그리고 그 내부에 삼자를 사용하여 인수를 다양하게 만들 수 있습니다. 그러나 그것은 OTT DRY-ness imo입니다.

관련 문제