【问题标题】:Highlight specific elements of an embedded ruby array and display it as one sentece突出显示嵌入式 ruby​​ 数组的特定元素并将其显示为一句话
【发布时间】:2022-12-12 01:10:04
【问题描述】:

我想将项目列表显示为一个句子,其中一些项目以不同的颜色突出显示。 <span class="class-name"></span>

我已经设法将它显示为两个单独的句子(数组),尽管我找不到将它们连接起来的解决方案并且只突出显示所需的句子。

尽管下面的代码用于排序,但我无法找到令人满意的解决方案来显示它。

# items = ['flour', 'oil', 'egg', 'salt']
# in_stock = ['flour', 'oil']
# items_in_stock = []
# items_not_in_stock = []

items.each do |item|
 if in_stock.include?(item)
  items_in_stock << item
 elsif !in_stock.include?(item)
  items_not_in_stock << item
 end
end

# items_in_stock = ['flour', 'oil']
# items_not_in_stock = ['egg', 'salt']
<p>
 <%= items_in_stock.to_sentence %>
 <strong>
  <%= items_not_in_stock.to_sentence %>
 </strong>
</p>

结果,我得到了两个不理想的句子,因为它应该显示为一个句子,并突出显示几个单词(例如,使用 strong )。

=> 面粉和油鸡蛋和盐

我也虽然做了以下事情:

#checked_items = []
items.each do |item|
 if in_stock.include?(item)
  checked_items << item
 elsif !in_stock.include?(item)
  checked_items << "<span class='red'>#{item}</span>"
 end
end

但后来我意识到它不起作用,结果是:

<p>
<%= checked_items.to_sentence %>
</p>

#=> Flour, oil, <span class='red'> egg </span> and <span class='red'> salt </span>

这是我在这里的第一个问题,希望它得到很好的解释。 在此先感谢您的帮助。

【问题讨论】:

    标签: html ruby-on-rails ruby erb


    【解决方案1】:

    你可以使用类似的东西:

    items = ['flour', 'oil', 'egg', 'salt']
    in_stock = ['flour', 'oil']
    
    decorated_items = items.map do |item|
      if in_stock.include?(item)
        item
      else
        "<span class='red'>#{item}</span>" # you can also use: tag.span(item, class: 'red')
      end
    end
    
    # => ["flour", "oil", "<span class='red'>egg</span>", "<span class='red'>salt</span>"]
    

    在这里你将有一个数组,如果你想在视图层(助手或视图)中显示它们,你需要安全地加入它们:

    safe_join(decorated_items) # which is better than decorated_items.join.html_safe
    

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 2011-04-12
      • 2020-04-17
      • 2014-12-22
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多