2010-01-18 2 views
2

Song 모델에는 lyrics 텍스트 속성이 있습니다. 새로운 라인 내 가사에 \n을 단락 지어진 때문에, 나는 종종 자신이 가사를 HTML 친화적 만들어 내보기에이 일을 찾을 :모델 속성 방법 부여

@song.lyrics.strip.gsub(/\n/, "\n<br />") 

내 모든 응용 프로그램을 통해 gsub 논리를 반복하고있어, 그리고 악화 여전히 가사를 저장하는 형식을 HTML로 인쇄 해보려는 모든 곳을 건드리지 않고 변경할 수는 없습니다.

내가보기에이 쓸 수 있도록 내가이 추상 싶습니다

@song.lyrics.to_html 

을 따라서 strip.gsub(/\n/, "\n<br />") 논리를 내 응용 프로그램에서 하나의 장소에 있는지합니다 (to_html 방법).

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 당신이 정확한 @song.lyrics.to_html 구문을 사용할 필요가 그리고 당신은 가사 모델을 생성하지 않으려면

답변

2

, 당신은 lyrics 메소드에 의해 반환되는 문자열에 싱글 방법을 추가 할 수 있습니다

class Song 
    def lyrics 
    str = read_attribute(:lyrics) 
    def str.to_html 
     strip.gsub(/\n/, "\n<br />") 
    end 
    str 
    end 
end 

그러나,이 정말 훌륭한 디자인이 아닙니다.

module HtmlFormatter 
    def to_html(attribute) 
    send(attribute).strip.gsub(/\n/, "\n<br />") 
    end 
end 

당신이 당신의 노래 모델 include HtmlFormatter이 같은 방법을 호출 할 수 있습니다 경우 : 그래서

@song.to_html(:lyrics) 

더 재사용 가능한 뭔가이 같은 to_html 방법으로 모듈을 작성 할 수 있습니다 원하는 구문을 정확히 따르지는 않지만 더 나은 디자인이라고 생각합니다.

모든 종류의 기능을 포함 할 수있는 별도의 가사 모델을 고려해 볼 수도 있지만, 응용 프로그램에 너무 무거울 수 있습니다. 뷰 관련 문제이기 때문에

+0

확실히 가사 모델을 원하지 않는다. 'HtmlFormatter' 모듈은 좋게 들리지만 acts_as_markdown (markdown 속성을위한 별도의'to_html' 메쏘드에 섞여 있습니다)과 충돌합니다 –

+0

왜 markdown을 사용하지 않습니까? 당신이 원하는 줄 바꿈을 줄 것입니다, 그렇죠? 만약 당신이 그것을 사용하고 싶지 않다면, 당신은 분명히 메소드의 이름을 바꿔야 할 것입니다 ... –

+0

또한 가사 방법은'nil'을 쓰여진 것처럼 돌려주지 않을 것입니까? (메소드 정의 뒤에'str'을 돌려 줄 필요가 있습니다.) –

1

, 당신은 당신의 전망에서 ApplicationHelper 모듈 그래서

module ApplicationHelper 

    def to_html(str) 
    str.strip.gsub(/\n/, "\n<br />") 
    end 

end 

에 to_html 방법을 배치 할 수 있습니다 :

<% = to_html(@song.lyrics) %> 
관련 문제