【问题标题】:Should I use get, post, put - does it matter?我应该使用 get、post、put - 这有关系吗?
【发布时间】:2013-02-04 04:57:24
【问题描述】:

在我的应用程序中,我在点击时间链接时切换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 %>

目前它正在使用 match,但是设置它的正确方法是什么?为什么?

感谢您的意见。

【问题讨论】:

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


【解决方案1】:

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

老实说,关于POSTPUT 也存在争议。但是由于网络服务器通常只处理GETPOST(通过参数模拟其他动词的行为),所以我倾向于不去打扰,并坚持我上面写的。

您似乎没有创建任何资源,所以从语义上讲,PUT 就是您要查找的内容。

至于match,在rails 3.X 中,是一个catch all => 路由中的所有动词都匹配。您可以使用match 'something', via: [:get, :post] 进行限制。在 Rails 4 中,默认情况下它什么都不做,你必须明确处理的动词。

【讨论】:

  • 当创建像上面这样的关联时,会是 POST 还是 PUT - 我认为这只是一个更新,因为这两个对象都存在,但也许这值得商榷?另外,Rail 的match 是做什么的?由于在 rake 路由中,它之后没有显示任何内容。
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多