2017-06-05 87 views
1

我在页面(如下)中有一个脚本,它调用jQuery插件并将路径传递给多个图像。这些图像存储在app/assets/img/bg而不是app/assets/images在Ruby on Rails中引用图像

<script> 
    $(".forms-wrapper").backstretch([ 
     "assets/img/bg/6.jpg", 
     "assets/img/bg/5.jpg", 
     "assets/img/bg/7.jpg", 
     ], { 
      fade: 1000, 
      duration: 7000 
     }); 
</script> 

的JavaScript功能是在位于应用程序/资产/插件/直道文件。

我能得到的功能通过改变路径,图像和运动图像的工作: -

<script> 
    $(".forms-wrapper").backstretch([ 
     "../assets/7.jpg", 
     "../assets/16.jpg", 
     "../assets/19.jpg", 
     ], { 
      fade: 1000, 
      duration: 7000 
     }); 
</script> 

,因为它们是由很多不同的地方引用我宁愿不动的图像。我试图将脚本中的路径更改为./assets/img/bg/7.jpg,但这不起作用。

我似乎在轨中有相对路径的各种问题,因为它似乎应用了它自己的规则。

另一个示例是脚本可以更改主题颜色和图像,但该脚本也参考了文件夹。我需要使用相对路径(../assets/img)引用图像文件夹,但相对路径看起来并不正确。

var setColor = function (color, data_header) { 
    jQuery('#style_color').attr("href", "assets/css/theme-colors/" + color + ".css"); 
    if(data_header == 'light'){ 
     jQuery('.logo img').attr("src", "assets/img/themes/logo1-" + color + ".png"); 
     jQuery('#logo-footer').attr("src", "assets/img/themes/logo2-" + color + ".png"); 
     jQuery('.navbar-brand img').attr("src", "assets/img/themes/logo1-" + color + ".png"); 
    } else if(data_header == 'dark'){ 
     jQuery('.logo img').attr("src", "assets/img/themes/logo1-" + color + ".png"); 
     jQuery('#logo-footer').attr("src", "assets/img/themes/logo2-" + color + ".png"); 
    } 
} 

如何可靠地解决资产的子目录以引用图像?这个问题在应用程序的不同部分以不同的方式表现出来。

谢谢

+0

Ca ñ我问为什么这样的路径为'img'文件夹? –

+0

是的 - 这是因为它是我导入的站点的一部分,并且子文件夹中有许多资产(图像,js,css文件等)。我最初尝试将资产放入我的Ruby应用程序中的标准文件夹,但有各种各样的文件引用,然后打破 – Dunny

回答

0

您必须使用Rails的

$(".forms-wrapper").backstretch([ 
    "<%= image_path('bg/6.jpg') %>", 
    "<%= image_path('bg/7.jpg') %>", 
    "<%= image_path('bg/8.jpg') %>", 
    ], { 
     fade: 1000, 
     duration: 7000 
    }); 

资产佣工这是假设的图像在app/assets/images/img/bg文件夹中。

一般来说,你在下面app/assets/images路径发送,这意味着

image_path('logo.png') # references app/assets/images/logo.png 

编辑:

如果您需要引用您可以添加这一个非正统的文件夹config/initializers/assets.rb(和重启)

Rails.application.config.assets.paths << Rails.root.join('assets', 'img') 
+0

@SebastiánPalma - 已经工作了,谢谢!!感谢冰人。 – Dunny

+0

好极了,只是将它标记为已接受来关闭这个问题 – Iceman

+0

@Iceman会做...只是最后一个问题,如果我可能......如何我可以将相同的功能应用于JavaScript函数中的路径吗?我很感谢您给予的帮助,所以如果您没有时间来解决这一部分,我会关闭并进行更多的研究,这是迄今为止最困难的部分我遇到过的Rails的问题!! – Dunny

0

请试试这个。

<script> 
    $(".forms-wrapper").backstretch([ 
    "../assets/img/bg/6.jpg", 
    "../assets/img/bg/5.jpg", 
    "../assets/img/bg/7.jpg", 
    ], { 
     fade: 1000, 
     duration: 7000 
    }); 
</script> 
+0

嗨。我已经尝试过,但这也不起作用。它在控制台中显示的路径是http://127.0.0.1:3000/assets/img/bg/6.jpg,但图像未显示。 – Dunny

+0

我认为我得到的路径正确,但rails导致路由错误(没有路由匹配[GET]“/assets/img/themes/logo2-orange.png)。在rails中引用文件和文件夹看起来像ab;缺乏艺术! – Dunny