Я пытаюсь использовать гем местного времени от Basecamp. После Readme я добавил
//= require local-time
В мой app/assets/config/manifest.js, который теперь выглядит так:
//= link_tree ../images
//= link_directory ../stylesheets .css
//= require local-time
Затем я использую драгоценный камень, как предписано:
<%= local_time(comment.created_at) %>
Который, согласно Readme, отображает
<time data-format = "%B %e, %Y %l:%M%P"
data-local = "time"
datetime = "2013-11-27T23:43:22Z">November 27, 2013 11:43pm</time>
В Readme также утверждается, что JavaScript, то есть клиент, затем преобразует это в:
<time data-format = "%B %e, %Y %l:%M%P"
data-local = "time"
datetime = "2013-11-27T23:43:22Z"
title = "November 27, 2013 6:43pm EDT"
data-localized = "true">November 27, 2013 6:43pm</time>
Но я вижу, что со мной этого не происходит. Разметка, сгенерированная local_time, остается нетронутой в DOM.
На самом деле слово «локальный» появляется 0 раз в скомпилированном application.js, который получает мой браузер.
Возможно, с камнем что-то не так, но пока я предполагаю, что делаю что-то не так. Мой код Ruby, кажется, отлично находит и использует драгоценный камень, но по какой-то причине часть JS никогда не запускается.
Что я делаю не так?
Обновлено: я использую версию Rails 6.0.3.4, версию Ruby 2.6.5p114 и версию 2.1.0 по местному времени.
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels")
вверху — плюс еще несколько несвязанных JS.
Можете ли вы попробовать поместить требование в файл application.js, а затем повторить попытку?
Я пробовал это, без кости.
Я столкнулся с той же проблемой. Кажется, это работает до Rails 6.
В Rails 6 активы JavaScript больше не включаются в каталог app/assets/ и вместо этого были перемещены в отдельный каталог app/javascript, обрабатываемый Webpacker. Это здорово, но когда я захотел добавить свой собственный javascript, не было четкой документации, описывающей, как это должно быть сделано.
Https://dev.to/morinoko/adding-custom-javascript-in-rails-6-1ke6
В моей папке /app/javascript я создал подпапку /app/javascript/helpers. В эту папку я поместил local-time.js прямо из репозитория GH. Затем я добавил следующий фрагмент кода в /app/javascript/packs/application.js
import LocalTime from 'helpers/local-time'
LocalTime.start()
На момент написания я сделал это пять минут назад, на мой взгляд
<p>Time Ago: <%= local_time_ago(Time.now) %></p>
Читает
Time Ago: 5 minutes ago
Это работает как обходной путь. Для потомков я рекомендую ссылку на конкретный JS-файл, используемый в текущей версии гема здесь.
Ответ Меровекса был хорошим временным обходным путем, но, согласно комментарию paulanunda к проблеме GitHub, есть гораздо более простой способ:
$ yarn add local-time
И вместо того, чтобы возиться с файлом manifest.js, просто поместите следующее в файл application.js:
import LocalTime from 'local-time';
LocalTime.start();
Что у тебя в app/javascript/packs/application.js ?