把链接放在闪光灯[:notice]

时间:2010-02-12 03:08:25

标签: ruby-on-rails ruby

我正在学习Ruby和Rails。

我有一个Ruby on Rails项目,用于跟踪服务器正在运行的作业。现在,当我手动创建一个新工作时,它宣布:

flash[:notice] = "Created job job number #{update.id}."

我想将#{update.id}转换为工作列表中作业的链接。

转到作业的网址是jobs/list?job=1234,其中1234是闪存通知中显示的update.id

是否可以将链接放入flash[:notice]声明?或者我是否需要重新处理此消息的显示方式才能将其转换为链接?

8 个答案:

答案 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">&times;</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}."

http://railscasts.com/episodes/132-helpers-outside-views

答案 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}."