2012-04-05 6 views
3

Я пытаюсь вернуть redirect_to и передать дополнительные параметры. Вот что у меня в контроллере:Использование redirect_to и передача дополнительных параметров

redirect_to(env['omniauth.origin'], :hello => "hello world") 

Это перенаправляется на URL правильно, но привет не передается. Идеи?

+0

Является ли ваша целью (omiauth) внешний url? – Deradon

+0

Нет, это не внешний url – AnApprentice

ответ

5

env['omniauth.origin'] a String? Если это так, я не думаю, что это может сработать. Вы можете попробовать добавить параметр как:

redirect_to(env['omniauth.origin'] + "?hello=helloworld") 

или что-то об этом.

1

Добавить путь к нему в маршрутах и ​​передать HelloWorld в качестве параметра

redirect_to(route_in_file_path('helloworld')) 
4

redirect_to в конечном итоге вызывает url_for, и если аргумент url_for является String, он просто возвращает эту строку нетронутым. Он игнорирует любые другие варианты.

Я хотел бы предложить, просто с помощью Rails игровой Hash#to_query метода:

redirect_to([env['omniauth.origin'], '?', params.to_query].join) 
+1

Я должен заметить, что это приведет только к генерации действительного URL, если 'env ['omniauth.origin']' еще не содержит строку запроса. – Brandan

0

Добавить функцию ApplicationController класса

class ApplicationController < ActionController::Base  
    def update_uri(url, opt={}) 
    URI(url).tap do |u| 
     u.query = [u.query, opt.map{ |k, v| "#{k}=#{URI.encode(v)}" }]. 
       compact.join("&") 
    end 
    end 
    helper_method :update_uri # expose the controller method as helper 
end 

Теперь вы можете сделать следующее:

redirect_to update_uri(env['omniauth.origin'], :hello => "Hello World") 
Смежные вопросы