2017-04-25 1 views
6

나는 레일 배경을 가지고 있고 나는 enter image description here동적 컨텐츠는

내 이메일 템플릿은 태그를해야합니다 그림과 같이 뭔가를 구현하기 위해 노력하고 있습니다. 클라이언트에게 전자 메일을 보내는 동안 그의 정보가 템플릿에 채워집니다. 나는이 링크 here을 찾았지만 대답은 없다. 나는 위로 보았고, this 보석을 발견했다, 그러나 그것은 액체 템플릿을 사용하는 것에 따라 나는 그것을 사용할 수 없다. 그리고 나는 시간 제한 때문에 그것을 이행 할 수 없었다.

저는 {{first_name}}을 찾음과 동시에 태그가 나타날 때마다 내용을 대체 할 수 있다는 것을 알고 있습니다.하지만 태그를 구현하는 효율적인 방법인지는 의심 스럽습니다.

아이디어와 지침을 공유하십시오. 미리 감사드립니다 :)

답변

0

이전에 말씀 드렸듯이 Liquid를 사용하여 교체하거나 (http://www.kuwata-lab.com/erubis/) 사용해 볼 수 있습니다.

또 다른 옵션은 같은 태그를 대체하는 것입니다 :

ERB.new(your_template.gsub("{{", "<%=").gsub("}}", "%>")).result 

당신은 {{ }} 구문을 사용하는 변수의 기본 인쇄를 변경합니다.

+0

나는 이것을 할 수 없다는 것이 두렵다. 이는 매우 안전하지 않은 방법이며 SQL 인젝션에 취약합니다. 'first_name'을 value로 대체하고 어떤 user의'firstname' 값을'User.delete_all'로 바꾸어야하는 이미지입니다. 여기서 대체되면, 문자열은'<% = User.delete_all %>'와 같을 것입니다. 나는 여기서 다른 말을 할 필요가 없다고 생각합니다. 모든 데이터가 사라지면 데이터베이스가 무너집니다. – Aakanksha

+0

오, 그래서 이것은 사용자가 사용하게 될 것입니까? 나는 그것이 당신의 팀에 의해서만 사용 될 것이라고 생각했습니다. – diofeher

+0

최종 사용자가 전자 메일을 보낼 사용자의 데이터로 태그를 대체 할 템플릿을 준비하는 데 필요합니다. 내 솔루션을 공유했습니다. 그것에 관한 제안을 환영합니다. 감사 – Aakanksha

4

나는이 대답을 게시하고 곧 잊어 버렸고 upvote가 그것에 대해 생각 나게하는 레일에 멍청한 사람이었습니다. 나는 일을 만들고 내 솔루션을 공유 성공적으로 얻으면 누군가는 그것을 찾고 :

class DynamicTemplateModel < ActiveRecord::Base 

    def self.parse_template(template, attrs={}) 
    result = template 
    attrs.each { |field, value| result.gsub!("{{#{field}}}", value) } 
    # remove anything that resembles a field but did not match a known field name 
    result.gsub!(/\{\{\.w+\}\}/, '') 
    return result 
    end 

end 

사용 : DynamicTemplate.parse_template(body, details)

details = {first_name: user.first_name, last_name: user.last_name, company: user&.company&.name, email_address: user.email} 

body = "Hi {{first_name}} {{last_name}}, Your company {{company}} is registered with us successfully" 

으로 parse_template 메토 d, 새로운 몸체는 예상대로 될 것입니다.

문자열 교체시 diofeher solution에 대한 주된 관심사는 보안이었습니다. 그래서 이걸로 관리 했어.

희망이 있으면 도움이됩니다. 더 나은 의견을 남겨주세요. 감사합니다

관련 문제