用图像替换文本中的标签

replace tags in text with images

我有一段带有 ##imageset## 标签的文本,我想将其替换为实际的图像集图像 (image_tag)。

这是我的视图代码的样子:

    <% @topictext = topic.text.gsub!(/##imageset##/).with_index { |iset,i| 

        if topic.topic_imagesets.includes(:imageset).order(:position)[i] then
           topic.topic_imagesets.includes(:imageset).order(:position)[i].imageset.imageset_pictures.order(:position).each do |pic|
              '<span>'+image_tag(pic.picture.image.thumb)+'</span>’
           end
        end
     } %>

    <%= @topictext.html_safe if @topictext %>

结果是,标签被替换为|pic|这是 ImagesetPictures 的记录,而不是实际 imageset_pictures.picture image_tag:

的范围
...takimata sanctus est Lorem ipsum dolor sit amet. [#<ImagesetPicture id: 269, imageset_id: 46, picture_id: 280,...>, #<ImagesetPicture id: 268, imageset_id: 46, picture_id: 236,...>] Lorem ipsum dolor sit amet, consetetur ...

这是我想出的解决方案:

<% @topictext = topic.text.gsub!(/##imageset##/).with_index { |iset,i|

  if topic.topic_imagesets.includes(:imageset).order(:position)[i] then
     topic.topic_imagesets.includes(:imageset).order(:position[i].imageset.imageset_pictures.order(:position).map{ |p|
        '<span>'+image_tag(p.picture.image_en.thumb)+'</span>'}.join("")

  end
} %>

<%= @toptext.html_safe if @toptext %>

可能不是最优雅的,但对我来说很好用。