当前位置: 首页 > 知识库问答 >
问题:

模型回调时Rails控制器中的触发操作

云开诚
2023-03-14

我正试图在Rails中通过服务器发送事件来实现流媒体直播。我有一个Rake任务,用于监听文件更改,从而将记录添加到数据库中。一旦添加,我想发送一个SSE到前端。

但是,模型不能将事件发送到前端,这是由控制器负责的。如何告诉我的控制器向数据库中添加了新记录?

到目前为止,我的(坏的)解决方案是:在模型中使用EventBus,在保存后回调,宣布更改并要求控制器侦听以下消息:

require 'reloader/sse'
class SseController < ApplicationController
  include ActionController::Live

  def index
    response.headers['Content-Type'] = 'text/event-stream'
    sse = Reloader::SSE.new(response.stream)
    EventBus.subscribe(:added) do |payload|
      sse.write({ /* payload */ })
    end
  rescue IOError
  ensure
    sse.close
  end
end

我认为我的请求在收到事件之前就结束了,这意味着它永远不会在取消订阅块中结束。这是正确的方法吗,如果是,我错过了什么?

共有1个答案

沈永新
2023-03-14

解决方案1:您可以使用rest\u客户端gem在模型的after\u save回调中向控制器发送请求。

解决方案2:为什么不在控制器中调用一个model方法来创建数据库记录,然后根据是否创建了记录来处理进一步的操作

 类似资料:
  • 概览 触发器配置卡片 此面板配置一些触发器的基本信息,或者进行查阅触发器触发日志等操作。 触发类型目前有两种: 数据表 微信支付回调 条件卡片 对应上面的触发类型,设置不同触发类型的参数。 动作卡片 当触发器的条件被满足,将会执行触发器中的动作。 目前有四种动作类型可选,分别如下: 邮件 微信模板消息 webhook 数据表操作 不同的触发类型对应可选的动作类型不同,每个动作类型又有可选模板变量的

  • 问题内容: 我想触发一个包含jQuery指令的AngularJS自定义指令。如何做呢?我已经在指令中阅读了关于发射功能的信息? 想法? 问题答案: 您可以使用服务在控制器和指令之间进行通信。 服务可能如下所示: 该指令可以响应服务: 只需将我所做的替换为jQuery操作,您就应该拥有所需的东西。 这是一个有效的小提琴:http : //jsfiddle.net/jeremylikness/wqXY

  • 问题内容: 我有一个POST控制器操作,可返回部分视图。一切似乎都很简单。但。我使用加载它,将type设置为。但是,当我的模型验证失败时,我认为我应该抛出一个带有模型状态错误的错误。但是我的答复总是返回500服务器错误。 如何报告回模型状态错误而又不返回Json并返回任何结果。我仍然想返回可以直接附加到某些HTML元素的局部视图。 编辑 我也想避免返回错误的局部视图。这在客户端上看起来很成功。让客

  • 问题内容: 如何获得Spring 3.0控制器来触发404? 我有一个带有控制器的控制器,对于要访问该控制器的某些URL,我希望该容器带有404。 问题答案: 从Spring 3.0开始,您还可以抛出带有注释声明的Exception :

  • 我正在使用 Rails 3,并且我在 StatusController 中有一个form_for。当我点击提交按钮时,我的创建方法永远不会被调用。我的创建方法有一个redirect_to:index,但是当我点击提交时,所有信息都保留在表单中,并且页面不会重定向。但是,该对象确实在数据库中正确保存。 这是什么原因造成的? 控制器: 查看: 我已经将代码调整到此,现在数据在提交时从表单中消失,但是对

  • CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一