2012-03-12 48 views
10

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

+3

cậu thậm chí thử? – austinbv

+0

Bộ điều khiển và hành động nào làm/hello tuyến đường đến? – James

+0

Bạn không thể làm như thế này? redirect_to 'path',: parm1 => "hi",: parm2 => "hi" – AyJay

Trả lời

19

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)

+0

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

+1

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

+0

@ygnhzeus Đó là lý do tại sao bạn nên sử dụng đường dẫn có tên. – James

1

đơ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 đó :)

+2

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

0

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.

6

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ác vấn đề liên quan