如何解决Rails 6:JS绕过条件,每次访问都运行代码
我正在尝试使用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
仅应在付款页面的支持下进行更新。
解决方法
您正在将JS代码与Ruby模板代码混合在一起。无论您放置在<% %>
标记中的什么,在呈现视图时都将始终在服务器端进行评估。
您应该做的是在满足条件时(全部在JS中)对update_item服务进行ajax调用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。