2012-07-10 2 views
0

Ruby on Rails를 사용하여 다중 언어 웹 사이트를 구축 중입니다. 여기서 컨텐츠의 일부는 사용자가 생성해야하며 모든 언어에 대해 다른 버전을 생성 할 수 있어야합니다. 언어 지원은 i18n gem에서 처리합니다.레일을 사용하여 변경 사항 추적 - "변경 되었습니까?"

콘텐츠의 일부는 Markdown부터 http://daringfireball.net/projects/markdown/basics을 통해 생성됩니다.

내 데이터베이스에서 다른 로케일에 대해 object.content_markdown_en, object.content_html_en, object.content_markdown_sv, object.content_html_sv 등을 저장합니다.

이제 사용자가 콘텐츠를 변경하면 새로운 html이 생성됩니다. 그러나 언어 중 하나에서만 변경 한 경우 모든 로케일에 대해 html을 다시 생성 할 필요는 없습니다.

나는 가능한 모든 로케일에 대한 루프에서 실행할 수 있습니다

if object.content_markdown_[locale]_changed? 
    generate_new_html 
end 

같은 것을 사용하는 몇 가지 방법이 될 줄 알았는데. 그러나 나는 이것을하는 좋은 방법을 찾을 수 없습니다.

답변

2

에 대해 어떻게 :

[:en, :sv].each do |locale| 
    if object.send("content_markdown_#{ locale }_changed?".to_sym) 
     send("generate_new_#{ locale }_html".to_sym) 
    end 
end 
0

당신은 이름으로 메소드를 호출 할 send를 사용할 수 있습니다

object.send("content_markdown_#{locale}_changed?".to_sym) 

루프는 다음과 같이 보일 것이다 :

%w(en sv).each { |locale| 
    if object.send("content_markdown_#{locale}_changed?".to_sym) 
    generate_new_html 
    end 
} 

그러나, 별도의 변환 표를 사용하는 것이 더 나은 방법 일 수 있습니다.

+0

하는 초 : – zsquare

+0

또한하여 저를 이길, 당신은''{와 블록을 시작했지만 – zsquare

+0

경고가 있어야한다 end''로 폐쇄 "동일한 코드는 입력 됨 ";) – Stefan