2009-02-09 27 views
8

Chơi với sinatra, tôi bị kẹt trên một vấn đề nhỏ: khi tôi sử dụng thông số với dấu gạch chéo, nó gây nhầm lẫn cho bộ định tuyến. Vì vậy, có một cách tốt đẹp để xử lý các loại param mà không cần phải mã hóa nó?Làm thế nào để sử dụng params với slashes với Sinatra?

Mã này trông giống như

get 'add/:url' do 
    #.... 
end 

Và tôi dự định để có được một cái gì đó giống như/thêm/http://sctackoverflow.com/ làm việc

Trả lời

10

Cậu cố gắng sử dụng các thông số splat?

Cái gì như:

get '/add/*' do 
    protocol = params[:splat].first 
    address = params[:splat][1..-1].join('/') 

    url = protocol + "//" + address 
end 
2

cảm ơn bạn, tôi đã không nghe nói về các thông số splat và nó hoạt động hoàn hảo cho trường hợp này. Thật vậy, tôi đã nhìn vào tài liệu hướng dẫn và tôi thấy thậm chí ngắn hơn sử dụng các thông số chụp và biểu thức thông thường:

get %r{/add/(.+)} do 
    url = params[:captures] 
end 
2

hoặc sử dụng:

url = request.fullpath[5..-1] 
Các vấn đề liên quan