헬퍼에 실제로 html이없는 것이 가장 좋다고 들었습니다. 내 질문은, 왜 안돼? 그리고 HTML 태그를 생성하려고한다면 실제 태그를 어떻게 피할 수 있습니까?도우미가 html을 사용하지 않아야하는 이유는 무엇입니까?
감사합니다.
-fREW
헬퍼에 실제로 html이없는 것이 가장 좋다고 들었습니다. 내 질문은, 왜 안돼? 그리고 HTML 태그를 생성하려고한다면 실제 태그를 어떻게 피할 수 있습니까?도우미가 html을 사용하지 않아야하는 이유는 무엇입니까?
감사합니다.
-fREW
내 조언 - 작은 HTML 조각 (몇 개의 태그)이라면 걱정할 필요가 없습니다. 그보다 더 - 부분적인 부분에 대해서 생각해보십시오. (헬퍼에서 HTML 문자열을 함께 사용하는 것은보기가 좋을만큼 고통 스럽습니다.)
정기적으로 헬퍼에 HTML을 포함합니다 (직접 또는 link_to와 같은 Rails 메소드 호출을 통해). 내 세계가 내 주위에서 무너지는 것은 아닙니다. 사실 지금까지는 내 코드가 매우 깨끗하고 유지 보수 가능하며 이해할 수 있다고 말하기까지했습니다.
어젯밤에 나는 사용자 옆에있는 사용자 아이콘과 함께 일반 링크와 함께 html을 뱉어내는 link_to_user 헬퍼를 작성했습니다. 나는 부분적으로 할 수 있었지만, link_to_user는 그것을 다루는 훨씬 더 깨끗한 방법이라고 생각한다.
이 질문에 대한 전체 답변을하지 않습니다,하지만 당신은 content_tag 방법을 통해 태그의 HTML을 생성 할 수 있습니다. 내 생각으로는 코드의 청결성이 왜 될지에 대한 것입니다.
또한 content_tag를 사용하면 태그를 태그로 중첩 할 수 있습니다. 이 blog post on content_tag을 확인하십시오.
Well 그 일은 할 수 있지만 실제로는 똑같은 일이며 여전히 매우 구체적인보기 코드입니다 –
동일한 결과를 가지고 있지만 "깨끗합니다". 이것은 taglibs와 함께 Java Web App 월드에서 발생하는 비슷한 인수입니다 (<% %>). 표현과 관련된 것입니다 결국 당신과 당신의 팀이 "올바른 방법"으로 결정한 것에 달려 있습니다 – Sixty4Bit
앞에서 언급했듯이 헬퍼는 일반적으로 뷰 코드를 구동하지만 뷰 코드 자체가 아닌 비즈니스 로직으로 사용되는 것으로 생각됩니다. 뷰 코드 스 니펫을 생성하는 것들을 넣는 가장 일반적인 장소는 부분적인 것입니다. 부분적으로 필요한 경우 도우미를 호출 할 수 있지만 일들을 분리하여 유지하려면 비즈니스를 도우미에게 맡기고 부분적으로보기가 가장 좋습니다.
또한이 규칙은 엄격하고 빠른 규칙이 아니라 모든 규칙에 유의하십시오. 컨벤션을 깰 좋은 이유가 있다면 가장 잘하는 일을하십시오.
헬퍼가 비즈니스 로직을위한 것이라고 생각하지 않습니다 뷰와 관련된 모든 종류의 헬퍼는 뷰 로직 비즈니스 로직보다는 핵심 비즈니스 로직을 모델 레이어에 저장해야한다고 생각한다. –
사실 비즈니스 로직은 분명히 그렇지 않다는 것을 의미한다. 프레 젠 테이 션 레이어입니다. 하지만 컨트롤러가 아닌 모델에서 찾을 수 있습니다. 그게 내 모든 앱이 고장난 이유입니까? 권자 –
아무 문제가 없다고 생각하지 않습니다. 대다수의 레일 헬퍼가 HTML 코드를 생성합니다. (이 코드는 자신의 목적입니다) - 이것은 나 자신이하는 일이라는 것을 의미합니다.
그러나 코드 가독성 문제는 항상 존재합니다. 원시 HTML의 큰 문자열을 만드는 도우미가 있다면 이해하기 어려울 것입니다. 이 헬퍼에서 HTML을 생성하는 미세이지만, 당신은 당신의 도우미 메서드는 HTML 태그를 반환은 content_tag
같은 것들을 사용하여이 작업을 수행하고, render :partial
아니라 만드는 단지 레일 3에 return %Q(<a href="#{something}">#{text}>)
당신이 * html_safe * 문자열 방법을 사용할 수있는 것보다해야 탈출하지 않을 것이다.
일반적으로 부분적인 부분에 html을 넣습니다.
의미에 대해 생각해보십시오. html을 문자열에 넣으면 의미 론적 측면이 사라집니다. 즉, 마크 업 대신 문자열이됩니다. 아주 다른. 예를 들어 문자열의 유효성을 검사 할 수는 없지만 마크 업의 유효성을 검사 할 수는 있습니다.
나는 html을 부분 대신 (그리고이 스레드를 어떻게 찾았는지) 헬퍼에 넣고 싶은 이유는 간결합니다. =render 'hr'
대신 =hr
을 쓸 수 있기를 바랍니다.
def hr
raw '<hr />'
end
* 한숨 *. 나는 실제로 많이 해왔다. 프레젠테이션 로직을 분리하는 것은 항상 좋은 생각이지만, 서둘러 서버 컨트롤과 도우미 클래스 및 다른 장소에서 HTML 태그를 통합했습니다. 적절하지 않았습니다. 나는 나쁜 사람입니다. ( – stephenbayer