Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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
Javascript 如何过滤和删除数据库中的特定对象?|反应为正面,轨道反应为背面/API_Javascript_Ruby On Rails_Reactjs_Database - Fatal编程技术网

Javascript 如何过滤和删除数据库中的特定对象?|反应为正面,轨道反应为背面/API

Javascript 如何过滤和删除数据库中的特定对象?|反应为正面,轨道反应为背面/API,javascript,ruby-on-rails,reactjs,database,Javascript,Ruby On Rails,Reactjs,Database,所以,事情是这样的,我现在正在学习React,我正在构建一个小型taskmanager Web应用程序,使用React作为前端,Rails(API)作为后端,使用React with Rails进行实践(我已经用它构建了其他Web应用程序)。 任务是数据库中的对象,其“title”作为字符串,“done”作为布尔值表示任务是否完成。 使用async和await fetch(“”)我成功地创建了函数,以便能够将方法直接传递到数据库,以检查和取消检查任务是否已完成,并删除任务。比如说: async

所以,事情是这样的,我现在正在学习React,我正在构建一个小型taskmanager Web应用程序,使用React作为前端,Rails(API)作为后端,使用React with Rails进行实践(我已经用它构建了其他Web应用程序)。 任务是数据库中的对象,其“title”作为字符串,“done”作为布尔值表示任务是否完成。 使用
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();
      }
    }
编辑1:所以,根据JMadelaine的说法,前端无法实现这一点。那么在Rails中如何实现这一点呢?我怎么称呼它为“反应”,当我按下一个按钮时,它就发生了?
我在下面评论了我首先要做的事情。我非常感谢任何见解、帮助或解决方案。谢谢:)

首先,此操作需要自定义路由,因为它不是默认的CRUD操作。 因此,在
routes.rb中
tasks
route下添加自定义路由,如:

delete'tasks',to:'tasks#multiple_delete'
然后在
TasksController
中定义
multiple\u delete
方法,其中包含代码,该方法将删除所需的
任务
,并将答案返回给您的客户,例如:

def多重删除
::任务。在哪里(完成:true)。全部销毁
头:好的
结束
然后在您的反应中,根据服务器的回答,您可以做一些事情

然后转到您的React代码,在所需的按钮上添加
onClick
事件(我不知道您使用的框架,我将分享我熟悉的Shopify代码示例。
render()之外执行以下操作:

<Button onClick={this.deleteAllDoneTasks}>
deleteAllDoneTasks=()=>{
if(window.confirm(`您确定要删除所有已完成的任务吗?`)){
待命(`http://localhost:3001/tasks)`,{方法:'DELETE'})
}
}
render()中执行以下操作:

<Button onClick={this.deleteAllDoneTasks}>


这不是前端应用程序的责任。您的Rails服务器应该有一个名为“deletealldonetasks”或类似的端点,前端所做的就是调用该端点。必须计算前端上的所有id是没有意义的,因为删除任务与特定id无关。它与完成状态有关。然后我需要在任务控制器中创建一个方法,如。。。“任务。在哪里(完成:正确)。摧毁你”,好吗?但我还需要定制路线吗?当按下按钮时,我如何在前端称之为反应?谢谢你,罗曼!在关闭
if
之前,我必须在“wait-fetch”行之后添加一行新行,让React自动重新加载任务的状态。我会把它贴在这里,这样将来可能会对其他人有所帮助。我这样做:
this.props.loadTasks()这是对另一个函数的调用:
async loadTasks(){let response=wait fetch('http://localhost:3001/tasks);const tasks=await response.json();this.setState({tasks:tasks});}
Btw,“head:ok”是什么意思?其余我熟悉的代码head:ok返回200个http代码,没有正文,只有成功代码。但是,您可以返回您想要的任何内容,如果您使用rails服务器作为api,您可以执行类似以下操作:
返回json:{message:'All completed tasks have successfully deleted'},status::ok
,并在承诺内向用户显示此消息。好运气谢谢你的回答:)