【发布时间】:2020-06-28 20:06:07
【问题描述】:
所以,事情就是这样,我现在正在学习 React,我正在构建一个小型任务管理器 webapp,其中 React 作为前端,Rails(API) 作为后端来练习使用 React 和 Rails(我已经用于构建其他网络应用程序)。
任务是数据库中的对象,它有一个“标题”作为字符串,“完成”作为一个布尔值来指示它们是否完成。
使用async 和await fetch('') 我设法创建了能够将方法直接传递给数据库的函数,以检查和取消选中已完成的任务,并删除任务。比如这样:
async deleteTask(task) {
if (window.confirm(`Are you sure you want to delete: "${task.title}"`)) {
await fetch(`http://localhost:3001/tasks/${task.id}`, {method: 'DELETE'});
this.props.loadTasks();
}
}
现在我想创建一个函数来一次删除所有已完成的任务。我该怎么做?如何获取所有任务并通过“done == true”或类似的方式过滤它们并将DELETE方法传递给数据库? 在此先感谢,任何帮助表示赞赏!我尝试了很多替代方案,甚至尝试过类似的方法,但没有成功:
async deleteAllDoneTasks() {
if (window.confirm(`Are you sure you want to delete all done tasks?`)) {
await fetch(`http://localhost:3001/tasks/)`, {method: 'DELETE FROM Tasks WHERE done = 1'});
this.props.loadTasks();
}
}
编辑¹:因此,根据 JMadelaine 的说法,这不能由前端完成。那我如何在 Rails 中做到这一点?我如何在 React 中调用它,当我按下按钮时让它发生? 我在下面评论了我首先要做什么。我将不胜感激任何见解、帮助或解决方案。谢谢:)
【问题讨论】:
-
这不是你的前端 React 应用程序的责任。您的 Rails 服务器应该有一个名为“删除所有已完成的任务”或类似名称的端点,而您的前端所做的就是调用该端点。非得把前端所有的id都搞清楚是没有意义的,因为删除task跟具体的id没有关系。这与完成状态有关。
-
那么我需要在任务控制器中创建一个方法,例如...“Task.where(done: true).destroy_all”,对吗?但是我还需要自定义路线吗?按下按钮时如何在 React 前端调用它?
标签: javascript ruby-on-rails reactjs database