2012-02-27 2 views
2

이메일 본문 템플릿 3 응용 프로그램을 여러 GSUB을하는 {first_name}을 실제 값으로 대체하십시오.레일에 내가 이메일 템플릿을

그러나 이러한 자리 표시 자 중 일부가있을 것이며 gsub가 이와 같이 사용되도록되어 있는지 확신 할 수 없었습니다.

body = @email.body.gsub("{first_name}", @person.first_name)gsub("{last_name}", @person.last_name).gsub("",...).gsub("",...).gsub("",...).etc...

이 기능을 달성하기 위하여 청소기 해결책이 있습니까? 또한 누군가가 이와 비슷한 일을했다면 결국 수백 개의 이메일에 대해 몇 개의 단락에서 여러 개의 gsub를 사용하는 것이 너무 느리다는 것을 알게 되었습니까?

편집은 내가 정규식을 사용하여 대 다수의 gsubs을 비교하는 몇 가지 테스트를 실행하며 정규식 여러 gsubs을 사용하는 것보다 보통 3 배 더 빠른 것을 나왔다. 그러나, 나는 정규식 코드가 더 읽기가 어렵다고 생각하므로 조금 정리해야 하겠지만 실제로 정규 표현식을 사용하면 여러 gsubs보다 훨씬 빠르다는 것을 알 수 있습니다. 필자의 사용 사례에는 많은 수의 문서를 여러 번 대체 할 것이므로 좀 더 많은 문서를 추가해야 할지라도 더 빠른 솔루션이 나에게 유리하다.

답변

4

당신은 정규 표현식에 당신이 잡을하고자하는 모든 문자열을 넣어야 할 해시에서 모든 어획량의 교체 넣어 :

"123456789".gsub /(123|456)/, "123" => "ABC", 
           "456" => "DEF" 

이 코드는 루비 1.9 작동합니다.

erb 또는 haml과 같은 템플릿 라이브러리를 사용할 수 있다면 이러한 유형의 작업에 적합한 도구입니다.

+0

흥미 롭; 이것은 여러 개의 gsub를 처리하는 것보다 더 효율적입니까? 나는 가독성 관점에서 볼 때 여러 코드가 다른 사람들이 내 코드를 이해할 수 있다고 생각합니다. regex 접근법과 다중 gsubs를 사용하면 다른 이점이 있습니까? –

+0

이 솔루션은 여러 gsubs보다 훨씬 빠릅니다. 읽는 것이 더 깔끔했으면 좋겠지 만, 속도의 이점은 다른 개발자를위한 문서 작성에 큰 영향을 미칩니다. 감사! –

관련 문제