Chcę przekazać parametry (hash) do redirect_to
, jak to zrobić? Na przykład:Railsy redirect_to z parametrami
hash = { :parm1 => "hi", :parm2 => "hi" }
i chcę, aby przekierować do strony /hello
URL tak: /hello?parm1=hi&parm2=hi
Chcę przekazać parametry (hash) do redirect_to
, jak to zrobić? Na przykład:Railsy redirect_to z parametrami
hash = { :parm1 => "hi", :parm2 => "hi" }
i chcę, aby przekierować do strony /hello
URL tak: /hello?parm1=hi&parm2=hi
Jeśli nie masz nazwie trasy dla/hello następnie musisz hardcode parametry do ciągu, który przekazujesz do redirect_to
.
Ale jeśli coś jak hello_path
następnie można użyć redirect_to hello_path(:param1 => 1, :param2 => 2)
Cześć, dziękuję za odpowiedź.Ale liczba parametrów nie jest znana, więc nie mogę ich zakodować na stałe .. – ygnhzeus
powinieneś być w stanie przekazać cały skrót parametrów jako jeden argument do hello_path() i zapisze każdy klucz, wartość pary jako parametr – xkickflip
@ygnhzeus Dlatego powinieneś używać nazwanej ścieżki. – James
Proszę, przekaż hash do kłótni w adresie URL, a w kodzie analizować je, aby uzyskać wszystkie potrzebne wartości.
param_arr = []
hash.each do |key , val|
param_arr << "#{key}=#{val}"
end
params_str = param_arr.join("&")
redirect_to "http://somesite.com/somepage?#{params_str}"
Wiem, że to może być bardzo prosty sposób to zrobić, ale hej, to będzie Ci gdzieś :)
Ponieważ używamy już Railsów, równie dobrze możemy użyć metody ['to_param'] (http://apidock.com/rails/Hash/to_param). – JacobEvelyn
Najprostszym sposobem (jeśli nie jest to nazwane trasy) będą:
redirect_to "/hello?#{hash.to_param}"
Użyłem następujące funkcje przed:
def add_query_params(url, params)
parsed_uri = URI(url)
if parsed_uri.query
query_params = URI.decode_www_form(parsed_uri.query)
else
query_params = []
end
params.each_pair do |k, v|
query_params << [k.to_s, v]
end
parsed_uri.query = URI.encode_www_form(query_params)
parsed_uri.to_s
end
Przykład użycia:
redirect_to add_query_params("/hello", parm1: 'hi', parm2: 'hi')
Ma to tę zaletę, zachowując istniejący URL params URL może już zawierać.
Zamiast:
redirect_to some_params
można zrobić:
redirect_to url_for(some_params)
Ty obracając params w URL z url_for
przed przekazaniem go do redirect_to
, więc co można przejść redirect_to
kończy się adres URL w postaci ciągu znaków, do którego przekierowanie jest chętnie przekierowywane.
Notatka dobrze: Nie rozumiem, dlaczego redirect_to
odmawia użycia parametrów. Kiedyś chętnie korzystał z params. W niektórych punktach ktoś dodał coś do Railsów, żeby to zabronić. Podejrzewam, że istnieją ku temu powody bezpieczeństwa, a jeśli tak, to przyczyny bezpieczeństwa mogą oznaczać, że ręczne wykonanie ma również wpływ na bezpieczeństwo. Ale nie udało mi się znaleźć żadnej dokumentacji wyjaśniającej, co tu jest.
aktualizacja: Znalazłem ostrzeżenia o zabezpieczeniach, ale nie trawi go jeszcze: https://github.com/rails/rails/pull/16170
czy nawet spróbować? – austinbv
Do jakiego kontrolera i czy działa/dojeżdża trasa? – James
Nie możesz po prostu tego lubić? przekierowanie do "ścieżki",: parm1 => "cześć",: parm2 => "cześć" – AyJay