Rails 3,自定义操作和HTML请求方法

我不太了解使用“post”与“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?),我应该使用普通链接还是表单? (并注意:假设我的用户安全模型都是用设计计算出来的,在filter之前是合适的,等等)

最重要的是,我将如何在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”。 或者它应该是一个链接? 它应该是一个隐藏字段的表单吗?

“link_to”方法通常生成锚标记,即“ ”,即常规GET请求

要使用link_to执行POST请求,您应该执行以下操作

 = link_to“Complete”,complete_task_path(:id => @ task.id),:method =>:post

请记住,如果在浏览器中禁用了javascript,则上述语句将回退到GET请求而不是POST。