2017-04-25 131 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'的圖像是'User.delete_all'。如果在這裏被替換,我的字符串將會像'<%= User.delete_all%>'。我不認爲我需要在這裏說別的。我的數據庫將崩潰,所有數據都消失了。 – Aakanksha

+0

噢,這會被用戶使用嗎?我認爲它只會被你的團隊使用。 – diofeher

+0

這對於最終用戶準備一個模板來說是必需的,在該模板中標籤將被電子郵件應該發送給的用戶的數據替換。我分享了我的解決方案。歡迎提出建議。謝謝 – Aakanksha

4

當我發佈了這個答案並很快就忘了它,並且upvote提醒了我這個問題,我是一個菜單noob。我成功地使其工作和分享我的解決辦法,如果有人在尋找它:

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關於更換字符串的主要擔心是安全性。所以用這個來管理。

希望這可以幫助別人。留下任何建議使其更好。謝謝