Tôi muốn chuyển tham số (băm) đến redirect_to
, cách thực hiện việc này? Ví dụ:Rails redirect_to with params
hash = { :parm1 => "hi", :parm2 => "hi" }
và tôi muốn chuyển hướng đến trang /hello
URL như sau: /hello?parm1=hi&parm2=hi
Tôi muốn chuyển tham số (băm) đến redirect_to
, cách thực hiện việc này? Ví dụ:Rails redirect_to with params
hash = { :parm1 => "hi", :parm2 => "hi" }
và tôi muốn chuyển hướng đến trang /hello
URL như sau: /hello?parm1=hi&parm2=hi
Nếu bạn không có một con đường mang tên/hello sau đó bạn sẽ phải hardcode các tham số vào chuỗi mà bạn chuyển đến redirect_to
.
Nhưng nếu bạn có một cái gì đó giống như hello_path
sau đó bạn có thể sử dụng redirect_to hello_path(:param1 => 1, :param2 => 2)
Xin chào, cảm ơn bạn đã trả lời.Nhưng số tham số không được biết, vì vậy tôi không thể mã hóa chúng .. – ygnhzeus
bạn sẽ có thể chuyển toàn bộ mã băm của tham số thành một đối số cho hello_path() và nó sẽ viết mỗi cặp khóa, giá trị làm tham số – xkickflip
@ygnhzeus Đó là lý do tại sao bạn nên sử dụng đường dẫn có tên. – James
đơn giản, vượt qua băm vào một cuộc tranh cãi trong URL, và trong mã của bạn phân tích nó để thoát khỏi tất cả các giá trị cần thiết.
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}"
Tôi biết điều này có thể là cách rất cơ bản để làm điều đó, nhưng hey, nó sẽ giúp bạn có được ở đâu đó :)
Vì chúng tôi đã sử dụng Rails, chúng tôi cũng có thể sử dụng phương pháp ['to_param'] (http://apidock.com/rails/Hash/to_param). – JacobEvelyn
Cách đơn giản nhất (nếu nó không phải là một con đường được đặt tên) sẽ là:
redirect_to "/hello?#{hash.to_param}"
tôi đã sử dụng các chức năng sau đây trước:
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
Ví dụ sử dụng:
redirect_to add_query_params("/hello", parm1: 'hi', parm2: 'hi')
này có lợi thế trong việc bảo vệ bất kỳ url hiện params URL có thể đã chứa.
Thay vì:
redirect_to some_params
Bạn có thể làm:
redirect_to url_for(some_params)
Bạn đang xoay params thành một url với url_for
trước khi đi qua nó để redirect_to
, vì vậy những gì bạn vượt qua redirect_to
kết thúc lên được một URL dưới dạng một chuỗi, mà redirect_to là hạnh phúc để chuyển hướng đến.
Lưu ý tốt: Tôi không hiểu tại sao redirect_to
từ chối sử dụng thông số. Nó được sử dụng để sẵn sàng sử dụng params. Tại một số điểm ai đó đã thêm một cái gì đó để Rails cấm nó. Nó làm cho tôi nghi ngờ rằng có những lý do an ninh để làm như vậy, và nếu như vậy, những lý do an ninh có thể có nghĩa là tự làm redirect_to url_for(p)
có ý nghĩa bảo mật quá. Nhưng tôi chưa thể tìm thấy bất kỳ tài liệu nào giải thích những gì đang diễn ra ở đây.
cập nhật: Tôi đã tìm thấy các cảnh báo bảo mật, nhưng chưa tiêu hóa nó được nêu ra: https://github.com/rails/rails/pull/16170
cậu thậm chí thử? – austinbv
Bộ điều khiển và hành động nào làm/hello tuyến đường đến? – James
Bạn không thể làm như thế này? redirect_to 'path',: parm1 => "hi",: parm2 => "hi" – AyJay