2010-02-26 61 views
2

我在我的控制器中生成一個url,從相對路徑「/ hangouts/test」訪問,以獲取外部網站(Facebook)上的url。我想使用url_for並使用散列傳遞參數,以便它可以逃脫它們。我想要的網址是:url_for生成當前路徑插入的網址

http://www.facebook.com/connect/prompt_permissions.php?api_key=6aca22e72866c7eaaedfb15be69c4b93& ...

利用這一點,但是:

url_for(:host => "www.facebook.com/connect/prompt_permissions.php?", :api_key => Facebooker.api_key, :next => test_hangouts_url, :cancel => root_url, :ext_perm => "publish_stream") 

我,而不是讓我的電流/去處/測試在那裏扔的路徑:

http://www.facebook.com/connect/prompt_permissions.php/環聊/測試?api_key = 6aca22e72866c7eaaedfb15be69c4b93 & ...

正如你所看到的,我不想讓「/ hangouts/test」在那裏 - 與API文檔中的選項一起玩了一下,但難住,任何人都知道如何使用url_for而不插入當前路徑?謝謝!

回答

2

你不應該使用url_for的哈希形式來生成你的應用程序之外的鏈接。

相反,你應該只使用字符串文本格式:

url_for "http://www.facebook.com/connect/prompt_permissions.php?api_key=6aca22e72866c7eaaedfb15be69c4b93&next=#{test_hangouts_url}&cancel=#{root_url}&ext_perm=publish_stream" 

除非給url_for哈希包含的那些論據之一url_for將使用當前的動作控制器/操作/ ID。然後,url_for將會根據與散列中給出的參數匹配的路由生成一個url。在問題中使用的url_for參數會生成有效的url,因爲它可以使用當前控制器/操作匹配路由。您將無法使用url的哈希表生成所需的url,而無需匹配路由。在給你url_for的哈希中提供一個控制器應該與你在創建應用時爲你生成的默認路由匹配,但這不是非常乾燥。

更好的解決方案是使用一個名爲路線:

map.prompt_fb_permissions "/connect/prompt_permissions.php", 
    :host => "www.facebook.com", :controller => nil, :action => nil 

那麼你可以使用替代url_for以下,每當你想生成這個這個網址。

prompt_fb_permissions(:api_key => Facebooker.api_key, :next => test_hangouts_url, 
    :cancel => root_url, :ext_perm => "publish_stream") 
+0

非常感謝你,EmFi - 我不知道url_for需要根據匹配路徑生成;我本想通過哈希以比字符串「更優雅」:) – ambertch 2010-02-26 10:46:41

0

您遺漏了controller參數,這就是爲什麼它會自動將控制器路徑(「/ hangouts/test」)添加到基本主機。

試試這個:

url_for(:host => "www.facebook.com", :controller=> "/connect/prompt_permissions.php", :api_key => Facebooker.api_key, :next => test_hangouts_url, :cancel => root_url, :ext_perm => "publish_stream")