2011-04-07 2 views
0

원래는 객체의 datetime과 같은 값에 대해 표현식이 포함 된 정적 문자열 (# {})을 사용하는 Rails에 서비스를 구축했습니다. 이 문자열은 다른 사용자와의 커뮤니케이션을 구축하는 데 사용되었습니다.사용자가 나중에 포함 된 표현식으로 해석되는 문자열을 사용자 정의하도록 허용

사용자가 포함 된 표현식을 사용하여 기본 텍스트를 사용자 정의 할 수있는 방법을 제공하고자합니다.

현재 모델, 컨트롤러 및 뷰 전체에 흩어져 있지만 현지화 같은 모든 것을 한 곳에 모아두고 싶습니다 (사용자마다 다릅니다).

초기 생각은 MongoMapper를 통해 MongoDB를 사용하여 문자열을 저장하는 사용자 정의 문서를 만드는 것입니다. 그런 다음 마이그레이션을 수행하지 않고도 새 문자열을 계속 추가 할 수 있습니다.

우리는이 같은 무언가로 문자열을 저장하는 것입니다 :

"Testing out a string at #{object.datetime}." 

나중에 사용자가 우리가 그들의 사용에 대한 이러한 문자열을 편집 할 수있는 양식을 사용할 수 있습니다 (다른 사용자로부터 격리).

문자열을 사용하려면 # {}을 값으로 바꾸거나 포함 된 표현식이 어떻게 평가되는지 말해야합니다.

질문 : 질문이 포함 된식이 정의 된 후에 나중에 계산하려면 어떻게해야합니까? 심볼을 만들 때 to_sym과 같은 것이 있습니까?

더 좋은 방법이 있나요?

감사합니다.

+0

삽입 된 표현식은 얼마나 복잡할까요? 루비 야? 하위 집합? 보간 할 값은 어떻게 전달됩니까? –

+0

일반적으로 object.name과 object.length와 같은 것이 될 것입니다. datetime 형식화와 같이 복잡 할 수 있습니다. 모든 표현식은 Ruby에서 허용됩니다. 문서에서 문자열을 얻을 때 아마도 해시 된 객체로 객체를 전달할 것입니다. –

답변

1

자신 만의 템플릿 엔진을 사용하거나 쓰고 싶을 것입니다. 템플릿 엔진을 사용하면 다음과 같이 간단하게 표현할 수 있습니다.

values = {"foo" => "bar"} 
"turn this {{foo}} into bar".gsub(/\{\{.+?\}\}/) do |x| 
    values[x[2..-3]] 
end 

# => "turn this bar into bar" 

액체 또는 수염이 좋을 수도 있습니다. eval과 관련된 솔루션을 손에서 벗어날 수 있습니다. 신뢰할 수없는 문자열은 안전하지 않습니다.

mongo는 설정 값을 저장하는 한 괜찮습니다.

+0

훌륭합니다. 적어도 저에게는 효과적입니다. 하나의 편집 : 'values ​​[x [2 ..- 3]] 행에서 대괄호를 제거해야한다고 생각합니다. 이것이 충분하지 않다면 나는 액체와 콧수염을 보겠다 ... –

0

패싯은 분명히 String.interpolate을 사용하여이 작업을 수행 할 수 있습니다. 오늘 아침에 this video을 보면서 나는 그것을 가로 질렀다.

관련 문제