2011-12-23 40 views
11

Trong Ruby on Rails 3 hướng dẫn, mã sử dụng:Tại sao sử dụng kết hợp thay vì nhận được khi định tuyến trong Rails?

match '/signup', :to => 'users#new' 
match '/signin', :to => 'sessions#new' 
match '/signout', :to => 'sessions#destroy' 

match '/contact', :to => 'pages#contact' 
match '/about', :to => 'pages#about' 
match '/help', :to => 'pages#help' 

hơn

get '/signup', :to => 'users#new' 
get '/signin', :to => 'sessions#new' 
get '/signout', :to => 'sessions#destroy' 

get '/contact', :to => 'pages#contact' 
get '/about', :to => 'pages#about' 
get '/help', :to => 'pages#help' 

mặc dù tất cả các tuyến đường chỉ muốn HTTP GET động từ. Tại sao không sử dụng get (hoặc :via => [:get] trên match) và giới hạn hành động định tuyến như là vấn đề thực tế?

Trả lời

22

Tôi sẽ coi đó là phương pháp hay nhất để sử dụng get [...] thay vì match. Như bạn đã đề cập một cách chính xác, match sẽ tạo cả hai tuyến GET và POST. Tại sao tạo chúng nếu bạn không cần chúng?

Sử dụng đối sánh chính xác (nhận hoặc đăng) giữ cho tuyến đường của bạn sạch sẽ và giúp ngăn chặn hành vi không mong muốn của ứng dụng của bạn. Điểm thứ hai là sự thật đặc biệt đối với các tuyến đường POST, nơi bạn không muốn đặt một liên kết yêu cầu GET lên trang web của mình một cách tình cờ có thể được theo sau bởi các bot tìm kiếm.

Cập nhật [2013-05-12]: Từ Rails 4.0 trở đi bạn hiện là required to explicitly specifiy the request method.

+5

+1 để cập nhật đường ray 4.0. Cảm ơn bạn đã dành thời gian để cập nhật câu trả lời cũ. – bengem

+0

Đoán bây giờ 'match' là tốt hơn nếu bạn có các tuyến đường được sử dụng cho nhiều động từ http. –

+0

@PetrosKyriakou Tại sao vậy? Tôi biết rằng theo thời gian, thực hành tốt nhất trong việc sử dụng một sự thay đổi khung. Tuy nhiên, tôi không nghĩ đây là trường hợp ở đây. Nếu bạn muốn cung cấp cả hai 'get'and' post'routes, hãy định nghĩa chúng một cách riêng biệt bằng cách sử dụng các từ khóa 'get' và' post'. Như đã đề cập trong câu trả lời được cập nhật, Rails thậm chí còn buộc bạn phải xác định phương thức yêu cầu. Tôi không biết về bất kỳ thay đổi gần đây nào về vấn đề đó. – emrass

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