我应该使用get,post,put - 这有关系吗?

时间:2013-02-19 13:27:35

标签: ruby-on-rails routing routes ruby-on-rails-3.2 httpverbs

在我的应用中,当点击时间链接时,我正在切换student是否属于training time

# 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 个答案:

答案 0 :(得分:8)

一切都与语义有关。 GET要获取资源POST以创建资源PUT(或PATCH,这是关于此事的辩论)以更新资源DELETE删除一个。

至于诚实,关于POSTPUT也存在争议。但由于Web服务器通常只处理GETPOST(其他动词的行为是通过参数模拟的),所以我不会太烦心,并坚持上面写的内容。

您似乎没有创建任何资源,因此从语义上讲,PUT是您正在寻找的。

对于match,在rails 3.X中,是一个catch all =&gt;所有动词都在路线中匹配。您可以限制使用match 'something', via: [:get, :post]。使用Rails 4,默认情况下它不会执行任何操作,您必须明确处理动词。