【问题标题】:Rails: How to add link_to with target blankRails:如何添加带有目标空白的link_to
【发布时间】:2012-08-08 22:46:24
【问题描述】:

我是 Rails 3 的新手,我想在下面的 link_to 助手中添加 (:target => "_blank")

link_to "GOOGLE", 'http://www.google.com', class: "btn btn-large btn-primary"

但我想使用 application_helper 来定义 link_to 方法。

  1. 如何在 application_helper 中定义 link_to 方法?
  2. 如何在 link_to 方法中传递类:“btn btn-large btn-primary”?

感谢您的帮助...

【问题讨论】:

    标签: ruby-on-rails-3.1


    【解决方案1】:

    为什么要覆盖link_to?它已经在 Rails 中定义了,只需像这样使用它:

    link_to "GOOGLE", "http://www.google.com", target: "_blank", class: "btn btn-large btn-primary"
    

    编辑:好的,明白了。我建议不要覆盖这种常见的方法,所以创建另一个:

    def link_to_blank(body, url_options = {}, html_options = {})
      link_to(body, url_options, html_options.merge(target: "_blank"))
    end
    

    它应该可以解决问题

    【讨论】:

    • 感谢您的快速回复。我不想重复自己(干),通过在每个link_to helper 中放置:target =>“_blank”。所以我想通过在application_helper 中创建一个方法将:target =>“_blank”与link_to helper 合并。但是我很难将类:“btn btn-large btn-primary”传递给 application_helper 中的新 link_to 方法。
    • 好的编辑了我的答案,看看。改用link_to_blank,我建议不要覆盖link_to,因为它是一种非常广泛使用的方法。
    • Link_to_blank 就像一个魅力,它成功了!非常感谢。
    • 查看我的答案,了解一种也支持块且不传递参数的方法。
    • 在多个位置向函数调用添加属性/属性/参数并不完全违反 DRY 原则。有时人们对编程概念的痴迷到了矫枉过正的地步(我将其称为上面的link_to_blank 函数)。这种对概念的过度应用是货物崇拜编程的开始。
    【解决方案2】:

    除了 Anthony 的回答之外,这更类似于 Rails 的 link_to 实现,包括对块的支持和不传递参数:

    def link_to_blank(name = nil, options = nil, html_options = nil, &block)
      target_blank = {target: "_blank"}
      if block_given?
        options ||= {}
        options = options.merge(target_blank)
      else
        html_options ||= {}
        html_options = html_options.merge(target_blank)
      end
      link_to(name, options, html_options, &block)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多