使 Turbo Demo 应用程序与本地 Rails 服务器一起工作

问题描述

我已经设置了一个使用 Turbo 的本地 Rails 应用。我正在尝试填充 the Turbo Demo iOS app显示我的本地 Rails 应用程序。有没有人做过类似的事情?

我将 Demo.current 切换为使用本地地址,但所有请求都显示错误加载页面”屏幕,演示应用中没有任何有用的日志。

Rails 应用程序显示我的基本路线正在尝试中,并通过重试 401 错误以某种形式的持久性。我更改了 SceneController 认 URL 以加载 /networks/all-people,这需要授权用户(通过 Devise)才能看到身份验证逻辑将如何进行。以下是运行演示应用程序时的 Rails 输出

Started GET "/networks/all-people" for 127.0.0.1 at 2021-01-21 19:50:26 -0500
Processing by NetworksController#all_people as HTML
Completed 401 Unauthorized in 0ms (Allocations: 256)


Started GET "/users/sign_in" for 127.0.0.1 at 2021-01-21 19:50:26 -0500
Processing by Devise::SessionsController#new as HTML
  Rendering layout layouts/application.html.erb
  Rendering devise/sessions/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (Duration: 0.3ms | Allocations: 218)
  Rendered devise/sessions/new.html.erb within layouts/application (Duration: 1.7ms | Allocations: 1056)
  Rendered layout layouts/application.html.erb (Duration: 9.4ms | Allocations: 7318)
Completed 200 OK in 10ms (Views: 9.8ms | Allocations: 7945)

有没有人能够将 Demo 应用程序填充到与本地 Rails 服务器一起工作?我完全不确定这里发生了什么问题,或者这里的匀场是否是一个好主意。

Turbo 正在加载,正如从我的浏览器访问时触发的以下事件侦听器所验证的那样。

<script>
  document.addEventListener("turbo:load",function(e) {
    console.log("TURBO LOADED");
  });
</script>

解决方法

要让 Devise 与 Turbo 一起工作,需要做一些事情。

添加app/controllers/turbo_controller

# frozen_string_literal: true

class TurboController < ApplicationController
  class Responder < ActionController::Responder
    def to_turbo_stream
      controller.render(options.merge(formats: :html))
    rescue ActionView::MissingTemplate => e
      raise e if get?

      if has_errors? && default_action
        render rendering_options.merge(formats: :html,status: :unprocessable_entity)
      else
        redirect_to navigation_location
      end
    end
  end

  self.responder = Responder
  respond_to :html,:turbo_stream
end

data: { turbo: "false" } 添加到您的设备登录表单

# app/views/devise/sessions/new.html.erb
<%= form_for(resource,as: resource_name,url: session_path(resource_name),data: { turbo: "false" }) do

更新config/initializers/devise.rb

class TurboFailureApp < Devise::FailureApp
  def skip_format?
    %w[html turbo_stream */*].include?(request_format.to_s)
  end
end

config.parent_controller = "TurboController"

config.navigational_formats = ["*/*",:html,:turbo_stream]

config.warden do |manager|
  manager.failure_app = TurboFailureApp
end

Detailed explanation 感谢 GoRails!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...