url_for генерирует URL с текущим путем вставки - PullRequest
2 голосов
/ 26 февраля 2010

Я генерирую URL в моем контроллере, доступ к которому осуществляется из относительного пути "/ Hangouts / Test", для URL на внешнем сайте (facebook). Я хочу использовать url_for и передавать параметры с помощью хэшей, чтобы они могли избежать их. URL, который я хочу, это:

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")

Вместо этого я получаю текущий путь к / Hangouts / Test:

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

Как видите, я не хочу, чтобы там был "/ hangouts / test" - немного поиграл с опциями в документах API, но в тупике, кто-нибудь знает, как использовать url_for без вставки текущего пути? Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Вы не должны использовать хеш-форму 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 будет использовать текущий контроллер действия / action / id, если только хэш, данный url_for, не содержит один из этих аргументов. Затем url_for сгенерирует URL из маршрута, который соответствует аргументам, указанным в хэше. Аргументы url_for, используемые в вопросе, генерируют действительный URL, потому что он может соответствовать маршруту, используя текущий контроллер / действие. Вы не сможете сгенерировать нужный URL-адрес с помощью хэш-формы URL-адреса без сопоставления маршрута. Предоставление контроллера в хэше, который вы даете url_for, должен соответствовать маршрутам по умолчанию, которые rails генерирует для вас при создании приложения, но это не очень СУХОЙ.

Лучшее решение - использовать именованный маршрут:

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

тогда вы можете использовать следующее вместо url_for всякий раз, когда вы хотите сгенерировать этот URL.

prompt_fb_permissions(:api_key => Facebooker.api_key, :next => test_hangouts_url, 
  :cancel => root_url, :ext_perm  => "publish_stream")
0 голосов
/ 26 февраля 2010

Вы пропустили параметр 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...