Это потому, что актив JavaScript скомпилирован. Не каждый раз, когда представление отображается. Вы должны использовать беспрепятственный JavaScript. Например:
Посмотреть пример:
<div class="ckeditor" data-ckeditor-font="<%= current_user.has_role?(font_user) %>"></div>
В качестве альтернативы (не проверено):
Вы также можете использовать для этого # content_tag , хотя вам нужно проверить, как точно передавать атрибуты данных. Если я не ошибаюсь:
<% data = {
'ckeditor-font': current_user.has_role?(font_user),
# other data...
} %>
<%= content_tag :div, class: 'ckeditor', data: data %>
Но в настоящее время у меня нет настроек для проверки вышеуказанного кода. Так что вам придется проверить это самостоятельно.
Чем в вашем активе JavaScript (CoffeeScript):
initCkeditor = (element) ->
fontUser = element.dataset.ckeditorFont == 'true'
# further CKEditor initialization code...
document.addEventListener 'turbolinks:load', ->
document
.querySelectorAll '.ckeditor'
.forEach initCkeditor
Если вы не установите атрибут data-ckeditor-font
, код все еще работает. Так как element.dataset.ckeditorFont
вернет undefined
, а undefined == 'true'
все еще false
. (Имейте в виду, что CoffeeScript ==
равен JavaScript ===
.)
См: