Должен ли я использовать строки, символы или что-то третье для атрибутов включения? - PullRequest
0 голосов
/ 04 ноября 2018

Взгляните на эти две строки:

   <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
   <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload', :defer => "defer" %>

Это генерируется по умолчанию в новом проекте rails, за исключением части :defer, которую я включил, чтобы отложить свои сценарии на основе метода, рекомендованного этим ответом .

Обратите внимание, что media не является ни символом, ни строкой, тогда как :defer является символом, а 'data-turbolinks-track' является строкой. Я даже не знаю, какую терминологию использовать здесь, поэтому я называю их «включенными атрибутами», поскольку они являются именами атрибутов на включении в моем application.html.erb.

Почему здесь есть разные типы? Что предлагается? Почему все три работают? Я нахожу это разочарование.

1 Ответ

0 голосов
/ 04 ноября 2018

Все после application на самом деле является хешем с символьными клавишами. В общем,

{foo: 'bar'}

эквивалентно

{:foo => 'bar'}

Если у вас есть строка с пробелами, дефисами и т. Д., Вам необходимо заключить ее в кавычки перед добавлением двоеточия; это то, что происходит с 'data-turbolinks-track':.

Наконец, передавая аргументы методу, вы можете оставить фигурные скобки на внешней стороне хэша, если он однозначен. Это часто называют голым хешем.

Итак, ваши звонки фактически эквивалентны:

<%= stylesheet_link_tag    'application', {:media => 'all', :'data-turbolinks-track' => 'reload'} %>
<%= javascript_include_tag 'application', {:'data-turbolinks-track' => 'reload', :defer => "defer"} %>

Что касается того, какой синтаксис использовать, то это в основном вопрос стиля и читабельности, если только вы не используете более старые версии Ruby (до Ruby 1.9 синтаксис «ракета» с использованием => был единственным вариантом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...