2012-08-08 65 views
33

我新的轨道3,我想补充(:目标=>“_blank”)下面的link_to与靶坯

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

到的link_to助手,但我想用application_helper定义的link_to方法。

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

谢谢您的帮助......

回答

81

你为什么要重写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 

它应该做的伎俩

+0

感谢您的快速回复。我不想重复自己(DRY),通过在每个link_to助手中放置:target =>“_blank”..所以我想通过在application_helper中创建一个方法来将:target =>“_blank”与link_to合并到一起。但我很难将类“btn btn-large btn-primary”传递给application_helper中的new link_to方法。 – joe 2012-08-08 23:22:04

+0

确定编辑我的答案,看看。使用'link_to_blank'代替,我建议不要重载'link_to',因为它是一个非常广泛使用的方法。 – 2012-08-09 00:48:30

+0

Link_to_blank的作品像一个魅力,它做到了!非常感谢。 – joe 2012-08-09 01:58:13

4

添加到安东尼的回答,这更类似于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