Rails 4.2: проблема с путем к изображению в JS

#javascript #jquery #ruby-on-rails #ruby-on-rails-4

#javascript #jquery #ruby-on-rails #ruby-on-rails-4

Вопрос:

Следующее является частью моего кода. фоновые изображения не загружаются.я пробовал такие вещи, как ‘<%= asset_path(«images/bg1.jpg «) %>’ и «images/bg1.jpg «и т.д.Я новичок в rails, кто-нибудь может указать мне правильное направление?

 $(".login-bg").backstretch(["bg1.jpg","bg2.jpg","bg3.jpg"],{fade:1e3,duration:8e3})
  

Ответ №1:

Из демо-версии:

 $.backstretch([
      "http://dl.dropbox.com/u/515046/www/outside.jpg"
    , "http://dl.dropbox.com/u/515046/www/garfield-interior.jpg"
    , "http://dl.dropbox.com/u/515046/www/cheers.jpg"
], {duration: 3000, fade: 750});  
  

По-видимому, ваш код не будет работать, потому что все, что вы делаете, это передаете строки. Вместо этого вы хотите передать маршруты, которые обслуживают ваши изображения.

Предполагая, что у вас есть это в файле javascript, вы не сможете использовать свой помощник rails. Что вам нужно было бы сделать в этом случае, так это:

  • Создайте контроллер, который обслуживает эти изображения: ImagesController
  • Просто загрузите изображения в онлайн-облако и поместите ссылки внутри массива

В качестве альтернативы, то, что вы должны быть в состоянии сделать, это написать script внутри представления (html.erb), и вы должны иметь возможность получить доступ к помощнику rails таким образом. Тогда вы смогли бы интерполировать ссылки в виде строки.

ie "[#{image_path('bg1.jpg')}", "#{image_path('bg2.jpg')}"]

Комментарии:

1. у меня есть эти изображения в /assets/images/bg1.jpg и я хочу получить к ним доступ оттуда, а не онлайн

2. Тогда вы либо хотите, чтобы контроллер обслуживал ваши собственные изображения, либо вам нужно, чтобы ваш массив маршрутов включал абсолютные пути "my_app.com/assets/bg2.jpg"

Ответ №2:

Предоставленный вами код является Javascript, который будет выполняться из браузера пользователя на компьютере пользователя. Таким образом, у него не будет прямого доступа к файлам в images каталоге на сервере приложений.

Если вы назовете свой файл Javascript something.js.erb , вы можете встроить в него код Ruby для расширения с помощью конвейера ресурсов, что-то вроде:

 $(".login-bg")
  .backstretch(
    ["<%= image_url('bg1.jpg') %>",
     "<%= image_url('bg2.jpg') %>",
     "<%= image_url('bg3.jpg') %>"
    ],
    { fade: 1e3, duration: 8e3 }
  )
  

Руководство по конвейеру ресурсов Rails является отличным источником информации о том, как использовать эти функции.