You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用smart_listing gem遇ExecJS::RuntimeError错误求解决方案

解决smart_listing gem与Asset Pipeline/Turbolinks的冲突问题

看起来你遇到的是smart_listing和Rails默认的Asset Pipeline、Turbolinks之间的兼容性问题——删掉那些asset标签能运行,但显然这不是长久之计,咱们一步步来解决:

第一步:先修复重复的JS引用

你的application.html.erb里重复加载了两次application.js:

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag "application" %>

重复加载JS文件很容易导致变量冲突、初始化异常,先删掉其中一行,保留带data-turbolinks-track的那行即可:

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

第二步:确保smart_listing的Assets正确引入

smart_listing需要自己的CSS和JS文件才能正常工作,你需要确认这些文件已经加入到你的Asset Pipeline中:

  1. 在app/assets/stylesheets/application.css里添加:
    *= require smart_listing
    *= require_tree .
    *= require_self
    
  2. 在app/assets/javascripts/application.js里添加:
    //= require turbolinks
    //= require smart_listing
    //= require_tree .
    
    注意顺序:turbolinks要在smart_listing之前加载,这样才能正确处理页面加载事件。

第三步:解决Turbolinks与smart_listing的初始化冲突

Turbolinks会让页面以AJAX方式加载,这可能导致smart_listing的JS组件(排序、分页)没有正确初始化。你可以试试以下两种方案:

在跳转到distribs#index的链接上添加data-turbolinks="false",比如:

= link_to '查看联系人', distribs_path, data: { turbolinks: false }

这样页面会以传统方式加载,确保smart_listing的JS能正常初始化。

方案B:在Turbolinks加载事件中重新初始化smart_listing

创建一个新的JS文件app/assets/javascripts/smart_listing_turbolinks.js,添加以下代码:

document.addEventListener('turbolinks:load', function() {
  // 重新初始化所有smart_listing组件
  if (window.SmartListing) {
    SmartListing.init();
  }
});

然后在application.js里引入这个文件:

//= require turbolinks
//= require smart_listing
//= require smart_listing_turbolinks
//= require_tree .

这样每次Turbolinks加载页面时,都会重新初始化smart_listing的功能。

第四步:调试具体错误

如果以上方法都没用,打开浏览器的开发者工具(F12),切换到Console标签页,查看具体的JS错误信息——比如是否有SmartListing is not defined、函数重复定义等问题,这些信息能帮你精准定位冲突点。

另外,检查你的_list.html.haml模板:确保smart_listing.paginate和smart_listing.pagination_per_page_links是在table标签外面,不要嵌套在tbody或thead里,HAML的缩进错误也可能导致渲染异常。

内容的提问来源于stack exchange,提问作者user9680695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:52:00