Rails中的Bootstrap Modal一直显示第一条记录

2023-12-24

当我单击模态中的“视图”时,它继续仅显示第一条记录。即使我单击第二条记录,它仍然显示第一条记录。下面是我如何实现 link_to 切换到名为 myModal 的模式框。

<%= link_to 'View in Modal', "#", data: {toggle: "modal", target: "#myModal"} %>
      <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="myModalLabel">Test</h4>
          </div>
          <div class="modal-body">
            <span class="note"><%= raw(usernote.note) %></span>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
          </div>
        </div>
      </div>
  </div>

问题

我想你已经做了类似的事情:

<% @usernotes.each do |usernote| %>
 <%= link_to ... %>
 // code of modal associated to the usernote
<% end %>

问题是您对所有模式使用了相同的 html ID(#myModal)。除了 ID 重复不符合 W3C 标准之外,这也是问题的原因。

当您单击其中一个链接时,它将打开第一个模式,其中包含#myModalID(这是第一条记录的模态)。

那么,如何解决这个问题呢?

简单的方法:每个用户注释一个模式

一种方法(最简单的方法)是对所有模态使用不同的 ID。例如:

<%= link_to ... data: {toggle: "modal", target: "#modalForUserNote#{ usernote.id }"} %>
  <div id="modalForUserNote<%= usernote.id %>" ...>
  // ....

但这种方式并不是最好的方式:您只需为每个用户注释创建一个模态...如果您有 1000 个用户注释,您将在 html 中生成 1000 个模态...这显然非常糟糕...

另一种方式:javascript回调

另一种方法是仅创建一个模式并使用一些 Javascript 代码编辑其内容。

代码示例可以是:

html code

  // the modal code

  <% @usernotes.each do |usernote| %>
    <% link_to ..., data: {toggle: "modal", target: "#modal"}, 'data-usernoteid' => ..., 'data-usernotedata' => ... %>
  <% end %>

javacript code (using jQuery)

  $('.modalLink').on('click', function() {
    $('#modal #idOfTheUserNote').html($(this).data('usernoteid'));
    // ...
  });

您可以注意数据属性的用法。 数据属性可以替换为对 Rails 应用程序的 AJAX 请求,该请求将返回 JSON 数据。

另一种方式:AJAX请求

最后一种方法是通过 Ajax 调用来请求 Rails 应用程序。您的应用程序将呈现 Javascript 视图(代码将发送到您的浏览器并进行评估)。

这可以简单地通过使用来完成remote: truelink_to 中的选项(rails 将自行处理 ajax 请求。

下面的代码可以做到这一点:

html code

  // the modal code

  <% @usernotes.each do |usernote| %>
    <% link_to 'text', some_action(usernote), data: {toggle: "modal", target: "#modal"}, remote: true %>
  <% end %>

controller code

   def some_action
     @usernote = Usernote.find_by_id(param[:id])
   end

view to render: for example usernote/some_action.js.erb

   $("#modal #modalIdOfTheUsernote").html("<%= @usernoed.id %>");

最好的方法是什么?

显然不是第一个。

在其他两个之间进行选择取决于您想要做什么:

  • 对于实时更新,AJAX 请求可能更好。但是您可能会遇到一些延迟,因为您需要等待服务器响应。

  • 否则,数据属性就足够了。

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

Rails中的Bootstrap Modal一直显示第一条记录 的相关文章

随机推荐

  • 将数组转换为 NSAttributedString

    我有一个NSMutableArray由 组成的NSAttributedString s 我正在尝试将其转换为单个NSAttributedString分离所有的NSAttributedString有一个角色 这种方法类似于数组到数组的转换NS
  • 将 32 位无符号“实数”数据类型(分为两个 16 位有符号字)转换为 javascript

    我有一个 32 位无符号 实 值 分为两个 16 位有符号 字 0 65535 值 如何将它们转换为 JavaScript 数字 例子 值1 18584 值2 18081 实际值为 20644 3 我正在寻找像 back2Real 1858
  • 我们可以将 saiku 与 Pentaho 分析器进行比较吗?

    我目前正在实习 我必须创建一个完整的 BI 应用程序 我想我会使用 pentaho 而且我必须只使用开源组件 我知道 Pentaho 分析器不是免费的 我的问题是 saiku 相当于分析器吗 如果是 我可以将它与 pentaho 一起使用而
  • 有没有一种方法可以在不使用Subject的情况下创建由方法调用触发的可观察序列?

    我有一个带有几个方法的服务 在我的代码中的各个不同位置调用 class Service method1 method2 我希望能够订阅这些方法调用 即有一个可观察对象 每当调用这些方法之一时它就会发出一个值 我意识到我可以用Rx Subje
  • 共享内存中的data.table以进行并行计算

    继有关的帖子之后数据表和并行计算 https stackoverflow com questions 14759905 data table and parallel computing 我正在尝试找到一种方法来进行手术data table
  • 如何在浮动 IP 后面使用 docker swarm 模式管理器

    某些提供商 例如 ScaleWay 将为您的服务器提供一个未连接到本地接口的 IP docker swarm init advertise addr
  • 修复 macOS 12 上的 git HTTPS 错误:“错误的密钥长度”

    我使用的是公司托管的 Bitbucket git 存储库 可以通过 HTTPS 访问 访问它 例如git fetch 在 macOS 11 Big Sur 上运行 但在更新到 macOS 12 Monterey 后出现故障 将 macOS
  • Java6 中对象 的通配符

    请问如何纠正投射并删除警告 unchecked unchecked cast required T found java lang Object 来自SSCCE import java awt import javax swing publ
  • Flutter:获取 HTML 页面的某些元素

    我最近开始使用 dart 和 flutter 为动物收容所开发一个应用程序 但遇到了问题 这个想法是有一个捐赠页面 用户可以选择为狗购买食物 打开的脚手架将显示食物的图片 并从销售所述食物的网站获取一些数据以及当前价格 该图像作为资产存储在
  • 如何在 vim 中自动格式化/缩进 C 代码?

    当我从另一个文件复制代码时 格式会变得混乱 如下所示 fun for for if 如何在 vim 中自动格式化此代码 尝试以下按键 gg G 解释 gg转到文件顶部 是一个修复缩进的命令G告诉它执行操作到文件末尾
  • C 中的线程

    我想在C中创建一个线程 以便该线程在两秒后自动调用 我使用Visual Studio和Windows平台进行开发 我该如何开始 您将需要使用操作系统特定的库来执行线程 在 Posix 上 你会想要研究一下pthreads https com
  • 向 Android 应用程序添加屏幕亮度控制

    我希望在应用程序菜单中添加控件来本地调整屏幕亮度 但似乎不知道如何操作 我已经看到了最大化或调暗亮度的示例 但我希望添加控件 以便用户可以控制和设置亮度级别 有谁有任何示例 教程 源代码 或者只是一个可以为我指明正确方向的地方 互联网 ht
  • 通过电话进行 Google 地图/地点 API 搜索

    我们有一个注册页面 用户可以在其中输入他的公司电话号码 我们想从电话号码中找到他的商业信息以进行验证 如何使用 Google 地点 地图 api 来完成此操作 还有更好的选择吗 我有点迷失了 通过谷歌 API 仔细检查后 他们的回复也没有返
  • 带换行符的长字符串

    我见过 C 代码使用 告诉编译器字符串中有换行符并且它应该全部在一行中 C C 有类似的东西吗 就像如果我想放这样的东西 73167176531330624919225119674426574742355349194934 96983520
  • Numpy 中一维数组的滚动窗口?

    有没有办法在 Numpy 中有效地实现一维数组的滚动窗口 例如 我有这个纯 Python 代码片段来计算一维列表的滚动标准差 其中observations是一维值列表 并且n是标准差的窗口长度 stdev for i data in enu
  • 如何在mysql中将日期格式的月份减一? [复制]

    这个问题在这里已经有答案了 假设我有一个 select 语句 SELECT COUNT wedding DATE FORMAT weddate y m d FROM weddingtable 我想让它可以从返回的月份中减去 1 例如 SEL
  • .Net 4 在 StrongNameSignatureVerification 上不断浪费一个 CPU 核心

    我们有一个在 Net 4 Windows 2008 R2 上运行的混合模式汇编应用程序 MFC WinForms 它在一个线程上不断使用 100 的 cpu 使用 ProcessExplorer 我们在繁忙的线程上看到以下堆栈 我们还可以看
  • 需要将mysql数据库中的图像显示到fpdf

    A 将图像作为 blob 保存在 mysql 数据库中 我希望使用 php 将其显示在 fpdf 中 我在执行此操作时遇到问题 因为我对 fpdf 很陌生 我真的需要帮助 谢谢 您将需要 FPDF 的此扩展 http www fpdf or
  • 对 Pandas DataFrame 描述输出进行排序

    我正在尝试对输出进行排序describe 与计数 不太清楚 怎么解决 Tried sort by and loc但它们都没有达到对描述的输出进行排序的目的 需要编辑以下代码行 df groupby Disease Category Appr
  • Rails中的Bootstrap Modal一直显示第一条记录

    当我单击模态中的 视图 时 它继续仅显示第一条记录 即使我单击第二条记录 它仍然显示第一条记录 下面是我如何实现 link to 切换到名为 myModal 的模式框 div class modal fade div class modal