我正在我的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}”为我工作?有什么区别?
答案 0 :(得分:4)
#{}
无效的原因是双引号"
和单引号'
之间的区别
编辑:有关字符串插值的更完整说明并使用#{}
样式,请阅读this question。看看为什么双引号与单引号通常不会造成有意义的性能问题,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}"?)
(您可以在上面的链接中看到更多关于插值的选项)
祝你好运!答案 1 :(得分:2)
尝试这种方式,请查看" "
和' '
"Really delete blog '#{article.title}'?"