Преобразование атрибутов сплата из Slim в ERB - PullRequest
0 голосов
/ 30 июня 2018

Я новичок в Rails, и мне было поручено изменить устаревший код, написанный на slim для ERB. Все шло гладко, но когда я достиг атрибутов splat и обнаружил, что заблокирован.

Тонкий, который я пытаюсь преобразовать, выглядит так:

doctype html
html lang="en" *data_turbolinks_messages
  head

Соответствующий контроллер:

DATA_TURBOLINKS_MESSAGES = {
    'data-turbolinks-messages' => ENV.fetch('TURBOLINKS_MESSAGES')
  }.freeze  

def data_turbolinks_messages
    DATA_TURBOLINKS_MESSAGES
end

И последний HTML-код, который я ожидал, выглядит так:

<!DOCTYPE html>
<html data-turbolinks-messages="VariableValue" lang="en">
<head></head></html>

Я пытался использовать slimrb --rails -e, но в результате получилось много тонких вспомогательных объектов, таких как ::Slim::Splat::Builder.new(_slim_splat_filter), и я не знаю, как написать это в ERB.

Другие решения, которые я пробовал (стрельба в темноте ... опять же, новинка для Rails)

  • <%= **data-turbolinks-messages -%>
  • <%= **data-turbolinks-messages.html_safe -%>
  • <%= *data-turbolinks-messages %>
  • <%= data-turbolinks-messages.to_s %>
  • <% *data-turbolinks-messages.html_safe %>
  • <%= tag.html lang:'en' data-turbolinks-messages %>
  • <%= tag.html lang:'en' data: data-turbolinks-messages do %>...<% end %>
  • <%= tag.html lang:'en' data:{data-turbolinks-messages} do %>...<% end %>

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

спасибо!

1 Ответ

0 голосов
/ 01 июля 2018

В конце концов мне пришлось сменить контроллер, чтобы хэш использовал символы в качестве ключей

DATA_TURBOLINKS_MESSAGES = {
    :'data-turbolinks-messages' => ENV.fetch('TURBOLINKS_MESSAGES')
  }.freeze  

def data_turbolinks_messages
    DATA_TURBOLINKS_MESSAGES
end

После того, как я это сделал, я мог разделить хеш в ERB тегами-помощниками. Я также использовал content_tag вместо tag.

<!DOCTYPE html>
<%= content_tag(:html, **data_turbolinks_messages, :lang => "pt" ) do %>
...
<% end %>

Я до сих пор не знаю, является ли это хорошим или плохим решением, так как я прошел через метод проб и ошибок, поэтому любые новые ответы приветствуются!

...