在我的应用中,当点击时间链接时,我正在切换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 %>
目前它正在使用匹配,但是设置它的正确方法是什么?为什么?
感谢您的意见。
答案 0 :(得分:8)
一切都与语义有关。 GET
要获取资源POST
以创建资源PUT
(或PATCH
,这是关于此事的辩论)以更新资源DELETE
删除一个。
至于诚实,关于POST
和PUT
也存在争议。但由于Web服务器通常只处理GET
和POST
(其他动词的行为是通过参数模拟的),所以我不会太烦心,并坚持上面写的内容。
您似乎没有创建任何资源,因此从语义上讲,PUT
是您正在寻找的。 p>
对于match
,在rails 3.X中,是一个catch all =&gt;所有动词都在路线中匹配。您可以限制使用match 'something', via: [:get, :post]
。使用Rails 4,默认情况下它不会执行任何操作,您必须明确处理动词。