代码之家  ›  专栏  ›  技术社区  ›  David Oneill

在闪光灯中插入链接[:注意]

  •  43
  • David Oneill  · 技术社区  · 15 年前

    我正在学习Ruby和Rails。

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

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

    我想把 #{update.id} 链接到作业列表中的作业。

    去工作的网址是 jobs/list?job=1234 1234在哪 update.id 在闪光提示中显示。

    是否可以将链接放入 flash[:notice] 声明?还是需要重新处理如何显示此消息才能将其转换为链接?

    8 回复  |  直到 7 年前
        1
  •  33
  •   Emily    12 年前

    我可能遗漏了一些明显的东西,但你应该能够做到

    flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]
    

    然后,只要确保在您的视图中显示闪光灯的内容时,不会转义它。

        2
  •  41
  •   Kirill    14 年前

    别忘了添加 .html_safe 在通知末尾,如果您使用的是Rails3。 所以会说 flash[:notice] = "Your message".html_safe

        3
  •  37
  •   Dorian    7 年前

    这个 @template 实例变量在Rails 3中不再可用 .

    相反,您可以在控制器中使用它:

    flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe
    

    希望这有帮助:)

        4
  •  16
  •   mikej heading_to_tahiti    15 年前

    正如NAS评论的那样, link_to 除非包含适当的帮助程序模块,否则无法从控制器获得,但是 url_for 是。因此,除了使用,我几乎会按照艾米丽说的做。 乌尔苏 而不是硬编码URL。

    例如,如果作业被定义为路由中的资源:

    link = "<a href=\"#{url_for(update)}\">#{update.id}</a>"    
    flash[:notice] = "Created job number #{link}"
    
        5
  •  6
  •   Community CDub    8 年前

    选定的答案对我不起作用。但是答案 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 也。

        6
  •  4
  •   nanda    15 年前

    您可以在控制器中使用别名 林克托 功能或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

        7
  •  4
  •   Giuseppe    10 年前

    基于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"
    
        8
  •  3
  •   mattwindwer    15 年前

    你可以一直使用铁轨 link_to 帮手:

    flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."