Nếu bạn muốn
"Hi #{user.name}, ...."
trong cơ sở dữ liệu của bạn, sử dụng dấu ngoặc đơn hoặc thoát khỏi #
với một dấu gạch chéo để giữ Ruby từ nội suy những thứ #{}
ngay lập tức:
s = 'Hi #{user.name}, ....'
s = "Hi \#{user.name}, ...."
Sau đó, sau khi bạn muốn làm nội suy bạn có thể, nếu bạn táo bạo hoặc tin tưởng bản thân, hãy sử dụng eval
:
s = pull_the_string_from_the_database
msg = eval '"' + s + '"'
Lưu ý rằng bạn sẽ phải chuyển s
thành chuỗi được trích dẫn kép để eval
hoạt động. Điều này sẽ làm việc nhưng nó không phải là cách tiếp cận đẹp nhất và lá bạn mở cho tất cả các loại lỗi lạ và khó hiểu nhưng nó sẽ không sao miễn là bạn (hoặc những người đáng tin cậy khác) đang viết các chuỗi; Tôi nghĩ rằng bạn muốn được tốt hơn với một hệ thống vi khuôn mẫu đơn giản, ngay cả một cái gì đó đơn giản như này:
def fill_in(template, data)
template.gsub(/\{\{(\w+)\}\}/) { data[$1.to_sym] }
end
#...
fill_in('Hi {{user_name}}, ....', :user_name => 'Pancakes')
Bạn có thể sử dụng bất cứ điều gì bạn muốn delimiters tất nhiên, tôi đã đi với {{...}}
vì tôi đã sử dụng Mustache.js và Handlebars.js gần đây. Việc triển khai ngây thơ này có vấn đề (không có tùy chọn định dạng trong mẫu, không có dấu phân cách thoát, ...) nhưng có thể là đủ; nếu các mẫu của bạn trở nên phức tạp hơn thì bạn có thể muốn lưu trữ các bit của ERB
trong cơ sở dữ liệu và sử dụng bộ xử lý ERB trong thỏa thuận thư viện chuẩn với nó.
Nguồn
2011-07-21 17:19:24
Cảm ơn, đã làm việc ... Tôi đã lưu trữ chuỗi trích dẫn đơn lẻ. Tôi đã bỏ lỡ cách nội suy sau khi lấy nó từ cơ sở dữ liệu. Tôi biết về rủi ro bảo mật xung quanh việc sử dụng điều này, nhưng người dùng không thể thay đổi chuỗi này trực tiếp. –
Tôi sẽ thêm rằng nếu chuỗi của bạn chứa HTML sử dụng phương thức 'raw' (http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw) và phương thức' html_safe'. – dennismonsewicz