Rails 6:JS绕过条件,每次访问运行代码

Posted

技术标签:

【中文标题】Rails 6:JS绕过条件,每次访问运行代码【英文标题】:Rails 6: JS bypassing the conditions, running code on each visit 【发布时间】:2020-12-18 00:13:39 【问题描述】:

我正在尝试使用 Rails 混合的 JS 代码处理单击后退按钮。当用户进入支付页面时,该商品的状态会发生变化(使双重订购和支付不可能),当用户点击返回按钮时,状态应该再次变为初始状态。

这是通过识别后退按钮和之前设置的会话来管理它的代码:

<script type="text/javascript">
    $(document).ready(function() 
      const perfEntries = performance.getEntriesByType('navigation');
      if (perfEntries.length && perfEntries[0].type === 'back_forward') 
          console.log(perfEntries);
          <% if session[:payment] == 'true' %>
              <% @item.update(status: 'available') %>
          <% end %>
      
    );
</script> 

问题是 JS 条件总是被绕过,update 方法在所有访问上都运行。因此,无论是否单击后退按钮,项目都会更新。我也在 JS 中尝试了内部 if,但仍然无法正常工作。似乎唯一有效的部分是 Rails 代码而不是 JS。

问题是这里有什么问题?因为我在其他部分有运行良好的 JS 代码。 而且,有没有更好的方法来处理这种情况? @item 应仅在付款页面支持时更新。

【问题讨论】:

【参考方案1】:

您将 JS 代码与 Ruby 模板代码混为一谈。无论您放置在&lt;% %&gt; 标记中的任何内容,都会在呈现视图时在服务器端进行评估。

你应该做的是在满足条件时对 update_item 服务进行 ajax 调用(全部在 JS 中)

【讨论】:

以上是关于Rails 6:JS绕过条件,每次访问运行代码的主要内容,如果未能解决你的问题,请参考以下文章

Rails:每次使用控制台更改代码时重新启动服务器

Rails 6.1:Webpacker 找不到 application.js

如何快速正确的安装 Ruby,Rails 运行环境 · Ruby China

Rails 操作以状态 200 运行,但未访问模板且未触发 jQuery

每次使用 YouTube Data API v3 时如何绕过输入验证码来授权我的代码

如何通过 Webpacker 使用 Rails 6.1 安装 Alpine JS 3