2013-02-19 40 views
1

在我的應用程序中,當點擊時間鏈接時,我會切換student是否屬於training time我應該使用get,post,put - 這有什麼關係嗎?

# controller 
def time 
    @student = Student.find(params[:student_id]) 
    @time = TrainingTime.find(params[:training_time_id]) 
    @student.toggle_time(@time) 
    respond_to do |format| 
    format.html { redirect_to @student } 
    format.js 
    end 
end 

# routes 
resources :students do 
    match "time/:training_time_id", to: "students#time", as: :toggle_time 
end 

# view 
<%= link_to t.time_format, student_toggle_time_path(@student, t), remote: true %> 

目前它使用的是匹配,但是設置它的正確方法是什麼?爲什麼?

感謝您的輸入。

+1

對於http動詞的一般用法:很好的答案在這裏http://stackoverflow.com/questions/630453/put-vs-post-in-rest – 2013-02-19 13:29:52

回答

8

這完全是關於語義。 GET來獲取資源,POST來創建資源,PUT(或PATCH,這些是關於此事的爭論)來更新資源,DELETE來刪除一個資源。

最爲激動人心的是,也有關於POSTPUT的爭論。但是由於Web服務器通常只處理GETPOST(其他動詞通過參數模擬的行爲),所以我傾向於不打擾太多,並堅持我上面寫的內容。

您似乎沒有創建任何資源,因此從語義上講,PUT是您正在尋找的。

至於match,在rails 3.X中,是catch all =>所有動詞都在路由中匹配。你可以限制使用match 'something', via: [:get, :post]。使用Rails 4,默認情況下它什麼也不做,你必須明確處理的動詞。

+0

當創建像上面這樣的關聯時,會是一個'POST'或'PUT' - 我認爲它只是一個更新,因爲這兩個對象都存在,但也許這是有爭議的?另外鐵路公司的'匹配'是做什麼的?由於在耙路線中它沒有顯示任何東西。 – 2013-02-19 13:35:21

+0

我更新了我的文章,並提供了您的評論的答案。 – ksol 2013-02-19 13:45:12

相關問題