1

在我的应用程序中,我在单击时间链接时切换 a 是否student属于 a 。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 %>

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

感谢您的输入。

4

1 回答 1

8

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

老实说,还有关于POST和的争论PUT。但是由于网络服务器通常只处理GETPOST(通过参数模拟其他动词的行为),我倾向于不去打扰太多,并坚持我上面写的。

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

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

于 2013-02-19T13:30:38.300 回答