Не удается динамически добавить идентификатор в тег div в помощнике по rails - PullRequest
0 голосов
/ 22 января 2019

У меня очень странная проблема. Вот мой взгляд:

<h1>All Deals</h1>

  <%= sanitize print_grouped_deals(@deals) %>

Вот мой сделок_helper.rb

  def print_grouped_deals(grouped_deals_by_date)
    grouped_deals_by_date.map do |(date, deals)|
      %(<div id='#{date.to_s}-deals'>
        <h3>#{brief_time date}</h3>
          #{deal_paragraphs_for_group(deals)}</div>)
    end.join
  end

  def deal_paragraphs_for_group(deals)
    deals.map do |deal|
      %(<p>#{"<span class='warning'>POSSIBLY EXPIRED! -</span>" if deal.probably_expired?} #{link_to deal.headline, deal}</p>)
    end.join
  end

Следует отметить 3-ю строку первого метода во втором фрагменте. Я не могу заставить его добавить идентификатор в мой тег div! Если я изменю <div id='#{date.to_s}-deals'> на <div class='#{date.to_s}-deals'>, это добавит класс без проблем, но если я оставлю его как id=, тогда он просто создаст простой тег <div> без атрибутов.

Чтобы мы не думали, что это связано с генерацией нескольких div с идентификаторами (хотя идентификаторы будут другими), я также попытался сгенерировать простой <div id="thing" /> из помощника, и я получаю те же пустые теги div, что и результат.

WTF?

1 Ответ

0 голосов
/ 23 января 2019

Вы должны передать белый список атрибутов помощнику sanitize https://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-sanitize

Чтобы разрешить атрибут id

<%= sanitize print_grouped_deals, attributes: %w(id) %>

Чтобы установить разрешенные по умолчанию теги или атрибуты для вашего приложения

# In config/application.rb
config.action_view.sanitized_allowed_tags = ['div', 'h3']
config.action_view.sanitized_allowed_attributes = ['id', 'class']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...