2013-07-22 155 views
0

我试图在待办事项列表上实现一个简单的“标记为完成”功能,但基于我的应用程序设置有困难。我开始一个将任务嵌套在列表中的教程,我稍微有点不同,但无法弄清楚正确的路线。标记任务完成

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

在我的任务控制器

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 %> 

任何想法?

回答

0

尝试使你的路线文件的行看起来像:

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 %> 

我没有测试完全之上,但应该让你在正确的方向前进。

+0

再次感谢克里斯目前得到这个错误 找不到任务与id =完成[WHERE“任务”。“user_id”= 1] – Joshua

+0

哦,是的,这将是一个问题。我想你实际上想在你的routes.rb里有这样的东西: match'/ tasks/complete /:id'=>'tasks#complete',as:'complete_task',via::put 你可能需要将该行移动到资源之前:如果您的路由文件中包含该行,请执行此操作...... –

+0

像魅力一样工作,欢呼克里斯。 – Joshua