2011-11-24 61 views
20

我正在制作Tweet此链接在Rails中。我需要生成的URL如下所示:使用Rails中的GET参数创建外部网站的URL

http://twitter.com/share?url=http%3A%2F%2Fexample.com&text=Hello%20World 

但稍微复杂一点。基本上用GET参数负载的URL附加

这将是很好用的Rails的助手之一,产生这个链接,喜欢的东西:

url_for("http://twitter.com/share", :url => "http://example.com", :text => "Hello world") 

但我还没有找到任何工作。有人有主意吗?

+1

你可以写你自己的助手对这一相当快 –

+1

没错,但我不想重新发明轮子,如果它已经可以在Rails的 –

回答

54

您可以致电哈希to_query中轨,这将照顾url编码等。因此,也许是这样的:

params = { 
    :a => "http://google.com", 
    :b => 123 
} 
url = "http://example.com?#{params.to_query}" 
+2

感谢你发布这个,它只是帮助我修复了一个梦魇bug –

+0

这工作完美!唯一的问题是它只在你使用“”时才起作用,而“它不起作用”。我知道这不是问题,但rails更喜欢使用''到'“ –

+2

@msj这是因为Ruby字符串插值不适用于单引号,因为单引号不会被解析。换句话说,这是因为Ruby不会使用单引号插入#{}。 –

2

编写自己的帮手,这将是一个代码简单的一行:

def twitter_url_for(url, text) 
    link_to "Share this url", "http://twitter.com/share?url=#{url}&text=#{text}" 
end 
+0

这使选项HTML属性:'Share this url' –

+0

我的坏,我得到了与命名路线混合的选项的链接。对于那个很抱歉。我刚刚更新了一些应该工作的东西。 –

+1

也许一个愚蠢的问题,但不会有这个网址有空格或做link_to自动处理转换为查询字符串和转换任何特殊字符等?编辑:没关系......它确实......回答了我自己的问题。 – TLK

2

我喜欢Brian的回答。这是一种方法的形式,以防其他人遇到这种情况。

def url_with_attributes_from_hash(url = "", attr_hash = {}) 
    url == "" or attr_hash == {} ? "#{url.to_s}" : "#{url.to_s}?#{attr_hash.to_query}" 
    end