2010-04-28 35 views
22

Tương đương với phương pháp Rails 'redirect_to của Sinatra là gì? Tôi cần phải theo một luồng Đăng/Chuyển hướng/Nhận để gửi biểu mẫu trong khi vẫn giữ các biến mẫu được chuyển đến chế độ xem của tôi. Các biến cá thể bị mất khi sử dụng phương thức redirect.Làm thế nào để làm một bài/chuyển hướng/nhận được bằng cách sử dụng Sinatra?

+0

http://stackoverflow.com/questions/4726884/can-you-specify-the-http-method- to-use-with-sinatras-redirect – Dmitry

+0

Bạn có thể xem Net :: HTTP http://stackoverflow.com/questions/10184737/how-can-i-make-a-post-request-inside- ruby-sinatra –

Trả lời

6

Sinatra Book nên xóa câu hỏi của bạn. Đặc biệt là phần "Redirect".

trích dẫn từ cuốn sách:

Các chuyển hướng thực sự gửi lại một tiêu đề Location cho trình duyệt, và trình duyệt tạo ra một yêu cầu tiếp theo đến vị trí chỉ định. Vì trình duyệt thực hiện yêu cầu theo dõi đó, bạn có thể chuyển hướng đến bất kỳ trang nào, trong ứng dụng của bạn hoặc toàn bộ trang web khác.

Dòng chảy của các yêu cầu trong quá trình chuyển hướng là: trình duyệt -> Server (chuyển hướng đến '/') -> Trình duyệt (yêu cầu '/') -> Server (kết quả cho '/')

+1

Giải pháp là lưu trữ mọi thứ trong phiên. Tất cả các giá trị bạn cần sau khi chuyển hướng hiện đang ở dạng ivars nên được đặt trong phiên thay thế. –

+0

Gần đây tôi đã hỏi một câu hỏi tương tự, nhưng chưa tìm thấy câu trả lời dứt khoát trong trường hợp cookie bị tắt ở phía máy khách ... Bạn có đề xuất giải pháp duy nhất mà bạn biết không? Ai khác ? Cảm ơn –

+1

Liên kết sách sinatra không còn tồn tại nữa. – Andres

47

Redirect ở Sinatra là cách đơn giản nhất để sử dụng.

Vì vậy, các mã dưới đây có thể giải thích:

require 'rubygems' 
require 'sinatra' 

get '/' do 
    redirect "http://example.com" 
end 

Bạn cũng có thể chuyển hướng đến con đường khác trong ứng dụng hiện tại của bạn như thế này, mặc dù mẫu này sẽ xóa một phương pháp.

delete '/delete_post' do 
    redirect '/list_posts' 
end 

Một nơi rất phổ biến nơi hướng dẫn chuyển hướng này được sử dụng là dưới Authentication

def authorize! 
    redirect '/login' unless authorized? 
end 

Bạn có thể xem chi tiết các mẫu dưới:

Sinatra Manual

FAQ

Extensions

Đối với câu hỏi thứ hai của bạn, đi qua các biến thành quan điểm, nó có thể như thế này:

get '/pizza/:id' do 
    # makeing lots of pizza 
    @foo = Foo.find(params[:id]) 
    erb '%h1= @foo.name' 
end 
+3

Điều này không trả lời được câu hỏi của tôi. Tôi muốn chuyển hướng trong một trình xử lý và bảo tồn các biến mẫu, như bạn có thể trong Rails. –

+0

Điều này cũng có trong Chrome tạo POST nếu bạn đã đăng, vì vậy hãy làm mới trang bạn sẽ gửi lại biểu mẫu. – Dmitry

+1

Hướng dẫn sử dụng Sinatra không còn là một liên kết hợp lệ nữa. – zhon

Các vấn đề liên quan