2011-11-14 30 views
6

Mặc dù nguyên tắc chung của chúng tôi là nguyên tắc thiết kế, chúng tôi cần có trình điều khiển thực hiện yêu cầu GET là một phần của luồng công việc liên quan đến một loạt chuyển hướng cho một dịch vụ bên ngoài). Có ai biết cách dự định để làm điều này không? Tôi không thực sự muốn bước ra ngoài khuôn khổ định tuyến tài nguyên được cung cấp bởi các tuyến Rails. Chúng tôi không cần hành động #index thường phản hồi yêu cầu GET đó.Các tuyến đường có tài nguyên, nhưng với #create action bằng GET thay vì POST

tôi thấy (ngạc nhiên) mà làm việc này, nhưng tôi không biết nếu nó được dự định, hoặc nếu chúng tôi muốn được khai thác một lỗi trong Rails và rủi ro vỡ sau đó xuống dòng:

resources :agreements, :except => [:index, :create] do 
    get :create, :on => :collection 
end 

Nếu rằng get :createget :something, chúng tôi đã có một con đường như

Helper: something_agreement_path 
Request: GET /agreements/:agreement_id/something 
Action: agreements#something 

Nhưng Rails thực sự tạo ra những gì chúng ta muốn:

Helper: agreements_path 
Request: GET /agreements 
Action: agreements#create 

Lỗi hoặc tính năng?

Trả lời

1

Tôi biết điều này có thể không dành cho mã định tuyến mới nhất, nhưng liên kết này có rất nhiều thông tin về định tuyến Rails. Trong phần 2.3 nó trình bày cách các tuyến RESTful được xây dựng.

Rails Routing from the Inside Out

Nếu tôi đoán theo những gì tôi đọc một thời gian ngắn ở đó. Các hành động REST mặc định được gán thủ công cho một tuyến đường cụ thể. Vì vậy, khi bạn thay đổi hành động tạo ra để sử dụng GET nó có một số loại hồ sơ (băm của các tuyến đường) mà nó đã tạo ra trước khi tạo một cái mới.

Vì vậy, để trả lời câu hỏi của bạn, tôi cho rằng hành vi này dựa trên hoạt động nội bộ của mã định tuyến cho Rails. Tôi cho rằng luôn có khả năng điều này có thể thay đổi tại một thời điểm nào đó trong tương lai.

+0

Cảm ơn, tôi sẽ đọc qua điều này. Tôi đoán nó đã được xuống đến * thực hiện *, đó là những gì lo lắng cho tôi ... nếu nó không phải là * hành vi dự định *, sau đó điều này sẽ phá vỡ tại một số điểm. Có lẽ tôi chỉ nên xác định một hành động khác với '# create'; Tôi bây giờ chỉ tò mò nếu có một cách tiếp cận dự định để thay đổi động từ HTTP được sử dụng cho mỗi hành động :) Chúng ta có thể thay đổi đường dẫn, nhưng dường như không phải động từ. – d11wtq

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