У меня очень странная проблема. Вот мой взгляд:
<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.
ВТФ?
@DaveSlutzkin, я не думаю, что это правильно. div генерируется один раз для каждой даты, поэтому они должны оставаться уникальными.
Я, конечно, не рекомендовал бы создавать такой html, вместо этого используйте content_tag или tag (помощник для рельсов 5). Это поможет с ремонтопригодностью и позволит избежать ошибок такого типа.
Это похоже на то, что действительно принадлежит частичному, а не помощнику.






Вы должны передать белый список атрибутов помощнику очистки https://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-sanitize.
Чтобы разрешить атрибут id
<%= sanitize print_grouped_deals, attributes: %w(id) %>
To set the default allowed tags or attributes across your application
# In config/application.rb
config.action_view.sanitized_allowed_tags = ['div', 'h3']
config.action_view.sanitized_allowed_attributes = ['id', 'class']
Похоже, это работает, но кажется немного нелепым, что мне придется добавлять каждый атрибут или тег, который я мог бы использовать в каждом случае (или когда-либо, в сценарии конфигурации). Я попробовал ваше первое предложение, и оказалось, что все другие атрибуты и теги запрещены (например, мои ссылки исчезли). Это означает, что без выбранных атрибутов должно быть разрешено все, но я думаю, что нет?
Идентификаторы будут дублироваться, если есть несколько сделок на одну и ту же дату, а спецификация HTML говорит, что идентификаторы должны быть уникальными. Может быть, Rails или Chrome, или кто-то применяет это?