使用 Turbolinks 渲染同一页面时无法使用 Flash

2024-04-20

我试图在点击更新端点后显示闪存消息。我想让用户保持在同一页面上并告诉他信息已更新。我启用了 Turbolink。

我的操作如下:

def update
    @form = Form.find(params[:id])

    if @form.update(form_params)
      respond_to do |format|
        flash.now[:notice] = "Form updated successfully"
        format.html  { render 'edit' }
        format.js { render 'edit' }
        # format.html  { redirect_to edit_form_path(@form), notice: "Form updated successfully" }
        format.json { render json: {message: "Form updated successfully", form: @form} }
      end
    else
      respond_to do |format|
        format.html { render 'new'}
        format.json { render json: {errors: @form.errors}, status: :unprocessable_entity }
      end    
    end
  end

我都尝试过flash and flash.now两者都没有结果。如果您看到被注释掉的行,它将重定向到同一页面并渲染 Flash。

这是我打印闪存的方法:

<%= notice %>
<%= flash.notice %>

我都用过,但似乎都不起作用。

根据我的观察,我可以看到 Turbolinks 击中了format.js端点。谁能帮我这个?

Edit

这就是我的表格的样子:

<%= form_with(model: @form, method: 'put') do |f| %>
  <!-- name -->
  <div class="field">
    <label class="label">
      From Name
      <sup class="is-danger">*</sup>
    </label>
    <p class="control">
      <%= f.text_field :name, class: "input" %>
    </p>
    <% if @form.errors.any? %>
    <p class="help is-danger">
      Form name <%= @form.errors[:name].first %>
    </p>
    <% end %>
  </div>

  <!-- create button -->
  <div class="control">
    <%= f.submit class: "button is-primary" %>
  </div>
<% end %>

Ajax 与 Rails 形成

警告:我正在使用手机,无法对此进行测试。但这无论如何都应该有效。

要表示您想通过 Ajax 提交表单,您需要输入remote: true在您的表单元素上,如下所示:

<%= form_with model: @form, method: 'put', remote: true do |f| %>
 <!-- rest of the form -->
<% end %>

当您单击“提交”时,您会注意到页面没有更改,但 Rails 日志仍然显示您对控制器执行了 ping 操作。整洁的!

接下来,您需要弄清楚如何处理这些数据。就是这样respond_to is for.

respond_to将根据控制器的访问方式发送不同的响应。就你而言,重要的是format.js,但您总是希望为 HTML 提供后备。

def update
    @form = Form.find(params[:id])

    if @form.update form_params
      respond_to do |format|
        flash.now[:notice] = "Form updated successfully"
        format.html  { redirect_to <SHOW PATH> }
        format.js # Will automatically look for update.js.erb
        format.json { render json: {message: "Form updated successfully", form: @form} }
      end
    else
      respond_to do |format|
        format.html { render :edit }
        format.json { render json: {errors: @form.errors}, status: :unprocessable_entity }
      end    
    end
  end
end

请注意,我做了一些代码更改。

现在,当您提交表单时,您应该看到没有任何变化,控制器被击中,记录被处理,然后Rails将查找update.js.erb。这就是我们下一步需要去的地方!

创建该文件后,填写:

console.log("<%= notice %>");

此时,验证您提交后是否可以在控制台中看到闪烁。

您需要将显示 Flash 消息的 HTML 抽象为我要调用的部分_notifications.html.erb它将包含以下内容:

<!-- _notifications.html.erb -->

<div id="flash">
  <% if notice.present? %>
    <%= notice %>
  <% end %>
</div>

最后,您必须更换闪存的内容。删除所有内容update.js.erb并尝试这个:

$('#flash').replaceWith("<%= j(render 'notifications') %>");
// Or
var flash = document.getElementById('flash'),
  flashParent = flash.parentNode;

flashParent.replaceChild("<%= j(render 'notifications') %>", flash);

就是这样!尝试一下,让我知道它是否有效。

再说一遍,这是我的手机。您可能需要修复一两个语法错误。


更多阅读 http://guides.rubyonrails.org/working_with_javascript_in_rails.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Turbolinks 渲染同一页面时无法使用 Flash 的相关文章

  • 将rails_admin 与rails_api 结合使用

    我最初将此发布为Rails api GitHub 上的问题 https github com sferik rails admin issues 2617 但由于不活跃 我现在将其发布在这里 我正在尝试使用rails admin使用 Rai
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 如何在 Capybara 中 POST 到 URL?

    刚刚从 Cucumber Webrat 切换到 Cucumber Capybara 我想知道如何将内容 POST 到 Capybara 中的 URL 在 Cucumber Webrat 中我能够执行以下步骤 When I send to d
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project
  • 子文件夹和关系中的 Rails 模型

    我在自动加载的文件夹中组织了一些轨道模型 config autoload paths Dir Rails root join app models 我可以直接使用所有模型 例如Image first file name 但是当我尝试通过关系
  • RSpec:如何在静态方法上使用should_receive?

    我在 lib gcm rb 中有一个模块 require net http require uri module GCM def self dispatch message reg ids data url URI parse GCM UR
  • Rails 中的字母分页

    我正在寻找 Rails 的宝石用于字母分页 我希望我可以在结果中找到第一个字母的列表 我的意思是 如果没有以 a 开头的行 我不希望 a 显示在分页链接上 这种宝石已经存在了吗 提前致谢 这根本不难创建 例如 如果您有一个find 也许像
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in
  • 如何根据域名更改视图格式

    我想知道是否有任何方法可以根据域名更改相同 Rails 应用程序的视图格式 例如 www domain com gt respond to format html api domain com gt respond to format xm
  • 我可以使用同一个 ActionMailer 从不同地址发送电子邮件吗

    我正在为我的 Rails 2 3 9 应用程序使用 ActionMailer 当我使用以下方式发送电子邮件时 deliver user invite config def user invite subject content subjec
  • 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

    如果我需要通过某些方式获取 URL 我该如何获取 URLproxy 它必须有一个timeout最大 n 秒 和一个用户代理 require nokogiri require net http require rexml document d
  • 将对象转换为哈希,然后将其保存到用户的列

    找不到任何接近我想做的事情 我想将一个对象存储到用户的列中 该列采用数组的形式 postgres def change add column users interest string array true default end 我有另一
  • 在 ruby​​ 中使用 Blowfish 加密字符串返回的字符串比 php 中的相同过程要短

    这让我很困惑 当我尝试使用以下输入用 Blowfish 加密字符串时 key 某个键 输入 输入字符串 我得到以下结果 ruby 79af8c8ee9220bde php 79af8c8ee9220bdec2d1c9cfca7b13c6 我
  • 处理 Rails 2.1.x 中的 RoutingError 的最佳方法?

    我正在使用Rails 2 1 中的routing rb 代码 并尝试让它达到这样的程度 我可以对找不到合适路径时抛出的RoutingError 异常执行一些有用的操作 这是一个有点棘手的问题 因为有一些 URL 类别纯粹是糟糕的 azenv
  • Rails autoload_paths 中的错误?

    我的代码中遇到一个奇怪的错误 我有一个 Rails 应用程序 库中有以下两个文件 lib module one module two class one rb module ModuleOne module Moduletwo class
  • Rails - 连接多个表

    我有以下型号 class Company lt ActiveRecord Base has many price movements has many goods movements end class PriceMovement lt A
  • Rails error_messages 帮助器

    这是一段很常见的代码 First name br error messages是一个辅助方法 但我很难找到它的文档 为什么呢 我在这里找到它们 error messages 具有相同的参数错误消息 http apidock com rail
  • Ruby/Rails - 如何创建类并从控制器访问它

    我一直在尝试使用一些不同的 gem 在 Rails 3 中显示谷歌地图 但遇到了一些问题 幸运的是我发现了这个https github com YouthTree bhm google maps https github com Youth
  • 使用 Paperclip 保存文件而不上传

    我有一个简短的问题 是否可以保存文件而不实际通过表单上传 例如 假设我正在查看电子邮件中的附件 并且我想使用回形针保存它们 我该怎么做呢 我是否必须在某处手动调用 save file 或类似的东西 任何帮助将非常感激 我有一个 rake 任

随机推荐

  • ClientError:调用 HeadObject 操作时发生错误 (403):禁止

    我正在创建一个 AWS Lambda 函数 尝试将文件 s3 download file 下载到我使用以下命令创建的临时目录tempfile来自 Python 3 6 的库 然后 我对文件进行一些转换 并且需要再次上传它 s3 upload
  • 访问自动属性中的支持字段

    有什么方法可以访问属性的支持字段以进行验证 更改跟踪等 像下面这样的事情可能吗 如果没有 是否有计划将其纳入 NET 4 C 4 public string Name get set if value
  • Oracle 中的第 N 个最高薪水

    为了找出oracle中的第N个最大sal 我使用下面的查询 SELECT DISTINCE sal FROM emp a WHERE SELECT COUNT DISTINCE sal FROM emp b WHERE a sal lt b
  • `$eq` 运算符是否适用于数组点表示法?

    我正在尝试编写一个聚合查询 expr inside lookup s match管道阶段 我发现了一些与数组点表示法相关的问题 想象一个集合relations数组字段称为nodes 以下查询可以正常返回正确的结果 db relations
  • 预防孤儿

    我试图通过在段落和标题内的最后两个单词之间添加不间断空格来防止出现单个单词孤儿 然而 我正在使用的脚本也有删除链接的副作用 p h1 h2 h3 h4 h5 h6 each function var wordArray this text
  • 一个模拟键盘按下的程序

    我是编程新手 我想编写一个程序 仅供自用 每次运行时都会重复一组预设的键盘操作 有人可以给我一些建议吗 是否有任何应用程序可以做到这一点 有各种各样的程序可以满足您的需求 如果你在 Windows 上 自动热键 http www autoh
  • jmeter恒定视频流

    我正在使用 Jmeter 来加载测试视频流 我可以传递登录信息 但我需要让 Jmeter 在提供视频流的页面上 保持 我怎样才能做到这一点 我已经设置了 cookie 管理器 如果视频流不在您的服务器上 您根本不需要测试它 例如 如果您的网
  • 本地化系统生成的隐私警报消息 iOS UIAlertView Xcode

    我正在使用 Xcode Swift 1 1 开发一个应用程序 并使用 iOS 7 1 和 iOS 8 1 模拟器对其进行测试 该应用程序允许用户访问他们的照片库 但在此之前 iOS 会显示隐私警报消息标题 以英语请求用户许可 App Nam
  • 使用 SearchView android studio 工具栏中的左侧空间

    我正在尝试添加一个简单的SearchView到我的应用程序中的工具栏 除了布局之外 一切都工作正常 之间有这个 空间 NavigationDrawer图标和SearchView 如果我设置了标题 则空间将填充该字符串 否则为空 空字符串 标
  • 简化平面数组或多维数组的循环

    通常 我会有一个数组来保存一组值 每个值我都需要处理 有时 数组仅保存单个集合 在这种情况下 每个值都需要经过该过程 其他时候 数组将保存许多集合 在这种情况下 每个值都将是一个数组 并且这些数组中的每个值都需要进行处理 这是一个例子 fo
  • 使用 MVVM 动态添加时给予 TabItem 焦点

    所有 我添加一个TabItem to a TabControl动态地使用 MVVM 新的TabItems加载良好 但我希望添加的选项卡自动获得焦点 也就是说 我添加了一个选项卡 但我不想必须单击该选项卡才能获得焦点 XAML 的TabCon
  • 如何将 CSS 样式仅应用于文本

    我正在尝试将样式应用于 HTML 文本之类的内容 我想要的基本上是 我得到的基本上是 正如您所看到的 第一行是缩进的 但其他行没有缩进 到目前为止 我已经将文本包含在 span 它嵌套在一个 div slide text text back
  • 作为 Windows 服务运行时,.Net Core 6 Worker Service 不写入日志

    我使用 C Net Core 6 Visual Studio 2022 创建了一个辅助服务 如果通过 Visual Studio 运行或直接从 Windows 资源管理器 PowerShell 启动 它会按预期写入日志文件 但是 当作为 W
  • 如何强制子进程刷新标准输出缓冲区?

    平台 Windows 8 1 IDE vs2013 使用c c 进程 A 使用管道重定向读取子进程的标准输出 但子进程不会在 printf 之后调用 fflush 以在子进程运行结束之前处理 A 无法从管道读取任何内容 ps 我有子进程的源
  • 具有可定制内容的 JSF 迭代复合组件

    我想创建一个复合组件 可以将迭代元素的实际布局传递给复合组件 这是一个简化的示例并且有效
  • 如何访问分区 Athena 表的子目录中的数据

    我有一个 Athena 表 每天都有一个分区 其中实际文件按小时位于 子目录 中 如下所示 s3 my bucket data 2019 06 27 00 00001 json s3 my bucket data 2019 06 27 00
  • python中字典列表中的top-k

    有没有一种简单的方法来执行此示例中的最大 k 个键 值对 s1 val 0 s2 val 10 s3 val 5 s4 val 4 s5 val 6 s6 val 7 s7 val 3 shapelets s1 s2 s3 s4 s5 s6
  • 如何通过光标url缩小图像的大小?

    我有一张尺寸为 105x105 的图像 我使用以下 CSS 脚本将其用作光标 class 1 child 1 cursor url theBell png 20 20 auto 当我将鼠标移到元素上时会出现图像 但它太大了 我不知道如何减小
  • 在 C# 中动态更改命名空间

    我想做这样的事情 如果定义了 DEBUG 则命名空间为 Test 或者命名空间为 TestB 请参阅下面的示例代码 我可以这样做吗 或者您有更好的想法来实现这一目标吗 提前致谢 if DEBUG SomekindofAttribute Na
  • 使用 Turbolinks 渲染同一页面时无法使用 Flash

    我试图在点击更新端点后显示闪存消息 我想让用户保持在同一页面上并告诉他信息已更新 我启用了 Turbolink 我的操作如下 def update form Form find params id if form update form p