Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 标记任务完成_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 标记任务完成

Ruby on rails 标记任务完成,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试在待办事项列表上实现一个简单的“标记为完成”功能,但基于我的应用程序设置,我遇到了困难。我开始了一个将任务嵌套在列表中的教程,我的做法略有不同,但无法找出正确的路线 我没有嵌套,但有简单的关联,即用户有许多任务,任务属于用户。我的任务表中有一个已完成的(布尔)列 “我的任务”控制器中的完整操作 def complete @task = current_user.tasks.find(params[:id]) @task.completed = true @task.save r

我正在尝试在待办事项列表上实现一个简单的“标记为完成”功能,但基于我的应用程序设置,我遇到了困难。我开始了一个将任务嵌套在列表中的教程,我的做法略有不同,但无法找出正确的路线

我没有嵌套,但有简单的关联,即用户有许多任务,任务属于用户。我的任务表中有一个已完成的(布尔)列

“我的任务”控制器中的完整操作

def complete
 @task = current_user.tasks.find(params[:id])
 @task.completed = true
 @task.save
 redirect_to tasks_path
end
路由文件

match '/tasks/complete' => 'tasks#complete'
索引视图

<% current_user.tasks.each do |task| %> 
 <%= task.description %> | <%= link_to "Complete", complete_task_path(task) %>
<% end %>

| 

有什么想法吗?

试着让路由文件中的行看起来像:

match '/tasks/complete' => 'tasks#complete', as: 'complete_task'
请注意,这可能会满足您的要求,但会不安全,因为HTTP GET请求在默认情况下不会受到跨站点请求伪造攻击的任何保护。除此之外,一般来说,您只希望使用HTTP GET请求进行读取,而不是像这里所做的那样进行写入/更新。使用HTTP PUT可能更合适。您可以按如下方式调整路线:

match '/tasks/complete' => 'tasks#complete', as: 'complete_task', via: :put
<%= task.description %> | <%= link_to "Complete", complete_task_path(task), method: :put %>
。。。然后像这样做:

match '/tasks/complete' => 'tasks#complete', as: 'complete_task', via: :put
<%= task.description %> | <%= link_to "Complete", complete_task_path(task), method: :put %>
|

我还没有完全测试过上面的内容,但应该会让您朝着正确的方向前进。

再次感谢Chris,当前出现此错误,无法找到id=complete[其中“tasks”。“user_id”=1]哦,是的,这将是一个问题。我认为您实际上希望在路由中包含类似的内容。rb:match'/tasks/complete/:id'=>“tasks#complete”,如:“complete#u task”,通过::put,您可能需要将该行移动到resources:tasks之前,如果您的路由文件中也有该行的话。。。