Rails root_path в application.js - PullRequest
       7

Rails root_path в application.js

6 голосов
/ 25 января 2011

Как я могу получить root_path проекта в моем файле application.js ?

Мне это нужно для плагина js ( codemirror ), который должен загружать другие файлы JS. Все хорошо, если я скажу "/javascripts/needed_file.js", но что если я разверну свой проект в "/custom".

?

Код должен творить чудеса во всем проекте, и я хотел бы, чтобы он был UJS, поэтому он должен быть в статическом файле JavaScript.

Какие-нибудь решения / простые хаки?

Ответы [ 3 ]

6 голосов
/ 25 января 2011

Там нет красивого решения.Я бы попробовал один из этих подходов:

  • Проверка window.location.pathname.Определите из этого, работает ли он от root или от префикса url.

  • Добавьте что-то вроде <script type="text/javascript" charset="utf-8">var ROOT_PATH = '<%= Rails.root_path %>';</script> где-нибудь в верхней части файла макета.

  • Используйте эту довольно хакерскую функцию (я подозреваю, что она может сломаться с некоторыми атрибутами скрипта HTML5):

    function urlOfCurrentFile() {
      var scripts = document.getElementsByTagName("script");
      return scripts[scripts.length - 1].src;
    }
    
1 голос
/ 27 марта 2013

У меня есть это в моем заголовочном файле.

<script type="text/javascript">
  var BASE_URL = '<%= root_url %>';
</script>
0 голосов
/ 21 ноября 2016

Что ж, лучший способ, который я найду, это использовать возможности JS для этого, например:

window.location.origin # http://localhost:3000/

Он даст вам полное имя хоста с http:// и номер порта.Как и в случае локального запуска Rails-сервера, он выдаст вам: http://localhost:3000

window.location.hostname # localhost

Он просто даст вам имя хоста и ничего о порте или HTTP.Если сервер Rails работает локально, он выдаст вам: localhost.

...