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 模板代码混为一谈。无论您放置在<% %>
标记中的任何内容,都会在呈现视图时在服务器端进行评估。
你应该做的是在满足条件时对 update_item 服务进行 ajax 调用(全部在 JS 中)
【讨论】:
以上是关于Rails 6:JS绕过条件,每次访问运行代码的主要内容,如果未能解决你的问题,请参考以下文章
Rails 6.1:Webpacker 找不到 application.js
如何快速正确的安装 Ruby,Rails 运行环境 · Ruby China
Rails 操作以状态 200 运行,但未访问模板且未触发 jQuery