0

现在我正在管理界面中查看编辑产品视图,但每次我尝试查找选项类型时,我的 api 都会返回 404。这似乎是因为 Select2 正在点击以下网址:(/ecommerce/api/option_types?...不包括实际故意查询),即使我的 api url 应该在,/store/api/因为我的routes.rb文件中有以下内容:mount Spree::Core::Engine, at: '/store'

我确认当我将代码mount Spree::Core::Engine, at: '/ecommerce'临时切换到routes.rb文件中时,我的选项类型正确显示在 select2 选择框中。

我唯一的猜测是,在项目的早期,我在/ecommerce(ie mount Spree::Core::Engine, at: '/ecommerce') 安装了 spree 引擎。但我已经更改了代码以将其安装store在路线错误(/ecommerce/api/option_types?...)。

我尝试挖掘源代码,但是使用 select2 及其 js 和所有内容,它会很快变得非常密集,哈哈。

关于如何解决这个问题的任何猜测?

4

1 回答 1

2

起初我无法重现该问题。但后来我想通了。该问题是由rails缓存资产引起的...您只需删除tmp/cache/assets/目录的内容即可解决此问题。

为什么会出现这个问题?后端用于 JS API 调用的路由定义并存储在 JS 对象Spree.routes中,您可以在浏览器 javascript 控制台中检查其内容。

这些 URL 前缀来自于Spree.pathFor定义core/app/assets/javascripts/spree.js.erb

Spree.mountedAt = function() {
  return "<%= Rails.application.routes.url_helpers.spree_path(trailing_slash: true) %>";
};

虽然Rails.application.routes.url_helpers.spree_path更改 Spree 挂载路径时会发生更改,但此 JS 文件一旦生成,就不会更改,因为它的 MD5 校验和仍然相同。tmp/cache/assets/因此将使用目录中的缓存版本。

于 2019-01-28T17:09:50.980 回答