我正在学习Ruby和Rails。
我有一个Ruby on Rails项目,用于跟踪服务器正在运行的作业。现在,当我手动创建一个新工作时,它宣布:
flash[:notice] = "Created job job number #{update.id}."
我想将#{update.id}
转换为工作列表中作业的链接。
转到作业的网址是jobs/list?job=1234
,其中1234是闪存通知中显示的update.id
。
是否可以将链接放入flash[:notice]
声明?或者我是否需要重新处理此消息的显示方式才能将其转换为链接?
答案 0 :(得分:41)
如果您使用的是Rails3,请不要忘记在通知的末尾添加.html_safe
。
所以它会说flash[:notice] = "Your message".html_safe
答案 1 :(得分:37)
Rails 3 中不再提供@template
实例变量。
相反,您可以在控制器中使用它:
flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe
希望这会有所帮助:)
答案 2 :(得分:34)
我可能会遗漏一些明显的东西,但你应该能够做到
flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]
然后确保在视图中显示时不会转移Flash的内容。
答案 3 :(得分:16)
正如nas评论的那样,除非您包含相应的帮助程序模块,否则您的控制器无法使用link_to
,但url_for
是。{1}}。因此,除了使用url_for
而不是对网址进行硬编码之外,我会做很多Emily说的话。
e.g。如果作业被定义为您的路线中的资源:
link = "<a href=\"#{url_for(update)}\">#{update.id}</a>"
flash[:notice] = "Created job number #{link}"
答案 4 :(得分:7)
选择的答案对我没有用。但答案是from this post。我顺便使用Rails 4.2.4
。在我链接的答案的指导下,这是我如何做到的:
<% flash.each do |name, msg| %>
<div class="alert alert-<%= name %>">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<div id="flash_<%= name %>"><%= sanitize(msg) %></div>
</div>
<% end %>
flash[:success] = "Blah blah. #{view_context.link_to('Click this link', '/url/here')}"
神奇的是sanitize
方法。
我也不需要使用.html_safe
。
答案 5 :(得分:4)
您可以在控制器中使用 link_to 功能或RailsCast配方中的别名:
"Created job job number #{@template.link_to update.id,
:controller => 'jobs', :action => 'list', :job => update.id}."
答案 6 :(得分:4)
以Dorian的答案为基础,这是一个带有链接的国际化闪光灯:
flash[:notice] = t('success', go: view_context.link_to(t('product'), @product)).html_safe
您的翻译(例如YAML文件)可能包含:
en:
success: "Successfully created a %{go}"
product: "product"
it:
success: "%{go} creato con successo"
product: "Prodotto"
答案 7 :(得分:2)
您始终可以使用Rails link_to
帮助程序:
flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."