在rails中创建一个指向assets文件夹的链接

时间:2013-06-14 00:37:58

标签: jquery ruby-on-rails asset-pipeline

想知道如何克服这个问题。在我的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) 

我确信你知道,资产文件夹不在'用户'中,它位于'App'文件夹中。我认为制作像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>

1 个答案:

答案 0 :(得分:1)

你有几个选择......

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

因为你指的是<script>标签中的代码,我假设这是一些也来自你的视图的代码,所以你也应该能够在那里使用erb语法。

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

尽管如此,我认为资产管道很糟糕,因为它为铁轨带来了全新的复杂程度,而且大多数应用程序都过度设计。