#{} 样式的替换在 ERB 表达式中有效吗?
Does #{}-style substitution work in ERB expressions?
我在 rails 教程中为删除操作添加了一个确认对话框,并且我想包含要删除的对象中的一些文本。所以我尝试了这个:
<%= link_to 'Delete', article_path(article), method: :delete, data: { confirm: 'Really delete blog "#{article.title}"?' } %>
替换没有发生:结果对话框显示 Really delete blog "#{article.title}"?
。
我已将其更改为使用格式字符串并且工作正常:
<%= link_to 'Delete', article_path(article), method: :delete, data: { confirm: 'Really delete blog "%s"?' % article.title } %>
发生替换:结果对话框显示 Really delete blog "Of cabbages and kings"?
我要更改哪些内容才能使更易读的“#{article.title}”对我有用?有什么区别?
试试这个,看看" "
和' '
"Really delete blog '#{article.title}'?"
#{}
不起作用的原因是双引号 "
和单引号 '
之间的区别
编辑:有关字符串插值和使用 #{}
样式的更完整描述,请阅读 this question. to see why double-quotes vs. single quotes don't normally pose a meaningful performance issue, read here。 - 此编辑归功于@PaulHicks。
不对单引号中的文本进行预处理(在创建 String 对象之前进行解析),而对双引号中的文本进行预处理。这样:
'hello\n "world"!' == "hello\n \"world\"!" #=> true
以下更改可以正常工作(注意双引号而不是单引号):
<%= link_to ... confirm: "Really delete blog \"#{article.title}\"?" } %>
编辑:正如@Stefan 所建议的,您也可以使用 %Q()
符号来避免转义:
confirm: %Q(Really delete blog "#{article.title}"?)
(你可以在上面的link中看到更多关于插值的选项)
祝你好运!
我在 rails 教程中为删除操作添加了一个确认对话框,并且我想包含要删除的对象中的一些文本。所以我尝试了这个:
<%= link_to 'Delete', article_path(article), method: :delete, data: { confirm: 'Really delete blog "#{article.title}"?' } %>
替换没有发生:结果对话框显示 Really delete blog "#{article.title}"?
。
我已将其更改为使用格式字符串并且工作正常:
<%= link_to 'Delete', article_path(article), method: :delete, data: { confirm: 'Really delete blog "%s"?' % article.title } %>
发生替换:结果对话框显示 Really delete blog "Of cabbages and kings"?
我要更改哪些内容才能使更易读的“#{article.title}”对我有用?有什么区别?
试试这个,看看" "
和' '
"Really delete blog '#{article.title}'?"
#{}
不起作用的原因是双引号 "
和单引号 '
编辑:有关字符串插值和使用 #{}
样式的更完整描述,请阅读 this question. to see why double-quotes vs. single quotes don't normally pose a meaningful performance issue, read here。 - 此编辑归功于@PaulHicks。
不对单引号中的文本进行预处理(在创建 String 对象之前进行解析),而对双引号中的文本进行预处理。这样:
'hello\n "world"!' == "hello\n \"world\"!" #=> true
以下更改可以正常工作(注意双引号而不是单引号):
<%= link_to ... confirm: "Really delete blog \"#{article.title}\"?" } %>
编辑:正如@Stefan 所建议的,您也可以使用 %Q()
符号来避免转义:
confirm: %Q(Really delete blog "#{article.title}"?)
(你可以在上面的link中看到更多关于插值的选项)
祝你好运!