2011-11-24 80 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 
相關問題