Jeśli chcesz
"Hi #{user.name}, ...."
w swojej bazie danych, należy użyć apostrofów lub uciec #
z backslashem zachować Ruby od interpolacji #{}
rzeczy od razu:
s = 'Hi #{user.name}, ....'
s = "Hi \#{user.name}, ...."
Później, kiedy chcesz zrobić interpolację, którą mógłbyś, gdybyś się śmiał lub zaufał sobie, używaj eval
:
s = pull_the_string_from_the_database
msg = eval '"' + s + '"'
Zauważ, że aby eval
działał, musisz zmienić s
w podwójny cudzysłów. To zadziała, ale nie jest to najmilsze podejście i pozostawia cię otwartymi na wszelkiego rodzaju dziwne i mylące błędy, ale powinno być w porządku tak długo, jak ty (lub inni zaufani ludzie) piszesz struny; Myślę, że będziesz lepiej z prostego systemu mikro-szablonów, nawet coś tak prostego jak to:
def fill_in(template, data)
template.gsub(/\{\{(\w+)\}\}/) { data[$1.to_sym] }
end
#...
fill_in('Hi {{user_name}}, ....', :user_name => 'Pancakes')
Można użyć cokolwiek ograniczniki chciał oczywiście pojechałem z {{...}}
ponieważ używam Mustache.js i Handlebars.js ostatnio. Ta naiwna implementacja ma problemy (brak opcji formatowania w szablonie, brak separatora, ...), ale może wystarczyć; Jeśli twoje szablony stają się bardziej skomplikowane, możesz chcieć przechowywać tylko bity o wartości ERB
w bazie danych i użyć procesora ERB w standardowej ofercie biblioteki.
Dzięki, że działało ... Już przechowywałam pojedynczy cytowany ciąg znaków. Właśnie brakowało mi sposobu interpolacji po pobraniu go z bazy danych. Jestem świadomy ryzyka bezpieczeństwa związanego z używaniem tego, ale użytkownicy nie mogą bezpośrednio zmienić tego ciągu. –
Dodam, że jeśli twój ciąg zawiera HTML, użyj metody 'raw' (http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw) kontra metody' html_safe'. – dennismonsewicz