2015-04-23 24 views
0

我在我的rails教程中添加一個確認對話框到刪除操作中,我想包含一些來自要刪除的對象的文本。所以我試過這個:ERB表達式中的#{}式樣替換是否工作?

<%= 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

另一個問題(投票結果重複)更容易在谷歌上找到,並有一個非常有用的答案。 –

+0

也許是重複的,但我確實認爲這個討論會對未來的ruby-ists有幫助。這個問題涉及到使用'#{}'插值的雙引號與單引號的具體問題(另一個只提到通過的區別)。也許應該編輯問題/答案,使他們更專注於這個特定問題(主題可能是:「爲什麼不##」''工作「或類似)。 – Myst

+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}"?) 

(關於插值,您可以在上面的鏈接中看到更多選項)

祝你好運!

+0

啊哈。我顯然已經遠離Ruby太久了,我忘了這一點。我一直在尋找這個重複的規範問題;到目前爲止,我已經找到了半打0-upvote和1-upvote等價物,但沒有什麼突出的。似乎應該有一個典型的問題。 –

+0

你也可以使用'%Q(。 ..)'字面以避免轉義:'確認:%Q(真的刪除博客「#{article.title}」?)' – Stefan

+0

感謝您澄清,@PaulHicks。我不知道這個區別。並感謝@提供了一個更清潔的選項。我會用提示編輯答案。 – Myst

2

試試這個方法,看" "' '

"Really delete blog '#{article.title}'?"