我真的不了解使用“post”vs“get”vs“put”请求,自定义控制器操作以及是否使用链接或表单/按钮的专业人士和骗局。
所以,假设我有一个简单的待办事项列表,包含任务和任务控制器,我想要一个“完整”的操作,我在数据库中找到一个特定的任务,并将其状态属性从“不完整”更新为“完成“。
def complete
@task = Task.find(params[:id])
if @task.update_attributes(:status => "complete")
redirect_to tasks_url, :notice => "Completed!"
else
redirect_to tasks_url, :error => "Whoops."
end
end
定义此路由的最佳做法是什么,我应该使用哪种HTML请求方法(post?put?get?),我应该使用普通链接还是表单? (并注意:假设我的用户安全模型都是用设计计算出来的,并且在过滤器之前是适当的等等)
最重要的是,我如何在Rails 3 routes.rb文件中清楚地表达所有这些?
请注意,以下代码并不适用于我:
#routes.rb
resources :tasks do
members do
post 'complete'
end
end
所以目前我正在使用它:
#routes.rb
match 'tasks/:id/complete', 'tasks#complete', :as => "complete_task"
#view
= link_to "Complete", complete_task_path(:id => @task.id)
但这会触发get请求,我觉得它应该是“put”或“post”。或者它应该是一个链接?它应该是一个隐藏字段的表单吗?
答案 0 :(得分:2)
“link_to”方法通常会生成一个锚标记,即“< a>< / a>”,即常规GET请求
使用link_to执行POST请求,您应该执行以下操作
= link_to "Complete", complete_task_path(:id => @task.id), :method => :post
请记住,如果在浏览器中禁用了javascript,则上述语句将回退到GET请求而不是POST。