0

想知道如何克服这个问题。在我的 Rails 应用程序的主页上,我有一个图像滑块:

  <div id = "carousel">
    <img id ="rotate_images" src="assets/1.1.png"/>

    <div id = "back">
    <img src = "assets/arrow_back.png">
  </div>  

    <div id = "forward">
    <img src = "assets/arrow_forward.png"></div>
  </div>

图像正确显示。然后,在同一个应用程序的另一个页面上,当我粘贴相同的代码时,图像没有显示出来。在控制台中我得到:

GET http://localhost:3000/users/assets/1.1.png 404 (Not Found) 

我相信您知道,资产文件夹不在“用户”中,而是在“应用”文件夹中。我认为制作像 src ="../assets/..etc" 这样的链接会做到这一点,但不是那么幸运。我会使用 Rails 代码,例如:

 <%= image_tag("arrow_forward.png") %>

但这只会让人头疼,因为我正在使用与我的 img src 属性匹配的 jQuery 代码。如果有任何用处,这里是 jQuery 代码。如果可以修改它以与 Rails image_tag 方式挂钩,那就太好了,但我真的很好奇为什么没有正确找到资产文件夹。谢谢你的帮助。

  <script>

  $('#back').on({
      'click': function () {
          var origsrc = $(rotate_images).attr('src');
          var src = '';
          if (origsrc == 'assets/3.1.png') src = 'assets/2.1.png';
          if (origsrc == 'assets/2.1.png') src = 'assets/1.1.png';
          if (origsrc == 'assets/1.1.png') src = 'assets/1.1.png';
          $(rotate_images).attr('src', src);
      }
  });

  $('#forward').on({
      'click': function () {
          var origsrc = $(rotate_images).attr('src');
          var src = '';
          if (origsrc == 'assets/1.1.png') src = 'assets/2.1.png';
          if (origsrc == 'assets/2.1.png') src = 'assets/3.1.png';
          if (origsrc == 'assets/3.1.png') src = 'assets/3.1.png';
          $(rotate_images).attr('src', src);
      }
  });
  </script>
4

1 回答 1

1

你在这里有几个选择......

我假设您正在运行 rails 3。我认为当您在生产中运行资产管道时,您将获得已消化和未消化的资产(image-HASHDIGEST.png)。所以在你的视图代码中使用asset-helper和在你的javascript中硬编码路径应该是安全的。

由于您指的是标签中的<script>代码,我假设这也是来自您的视图的一些代码,因此您也应该能够在其中使用 erb 语法。

使用资产管道时,您还可以使用 erb 预处理您的 javascript。这通常是通过附加.erb到文件(some.js.erb)然后在那里使用asset-helper来完成的。这可能是最干净的解决方案。

尽管如此,我认为资产管道很糟糕,因为它为 Rails 引入了一个全新的复杂程度,这对于大多数应用程序来说是压倒性的并且过度设计。

于 2013-06-14T01:36:40.543 回答