把链接放在一个flash
我正在学习Ruby和Rails。
我有一个Ruby on Rails项目,跟踪服务器正在运行的作业。 现在,当我手动创build一个新的工作,它宣布:
flash[:notice] = "Created job job number #{update.id}."
我想将#{update.id}
转换为作业列表中作业的链接。
转到作业的URL是jobs/list?job=1234
,其中1234是在flash通知中显示的update.id
。
是否有可能把一个链接到一个flash[:notice]
语句? 还是我需要重新工作如何显示这条消息,以将其转化为链接?
我可能会错过一些明显的东西,但你应该能够做到
flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]
然后只要确保在显示在视图中时不会跳过闪光灯的内容。
如果您使用Rails3,请不要忘记在通知末尾添加.html_safe
。 所以它会说flash[:notice] = "Your message".html_safe
Rails 3中不再提供@template
实例variables 。
相反,你可以在你的控制器中使用它:
flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe
希望这可以帮助 :)
正如nas评论的, link_to
不可用从您的控制器,除非您包含适当的辅助模块,但url_for
是。 所以我会做非常多的艾米莉说,除了使用url_for
而不是硬编码的URL。
例如,如果一项工作被定义为您的路线中的资源:
link = "<a href=\"#{url_for(update)}\">#{update.id}</a>" flash[:notice] = "Created job number #{link}"
你可以在你的控制器中使用别名到link_to函数或者RailsCast配方:
"Created job job number #{@template.link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."
基于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"
选定的答案不适合我。 但是这个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
。
你总是可以使用Rails link_to
helper:
flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."