Ruby on rails 使用content_标记的Recfactor html字符串

Ruby on rails 使用content_标记的Recfactor html字符串,ruby-on-rails,ruby,Ruby On Rails,Ruby,我使用一个字符串在助手方法中创建了一个嵌套的无序列表。代码还可以,但是如果可能的话,我更喜欢使用content-tag方法。以下是我所拥有的: def show_element_content(element_types, site) last = get_element_type_name(element_types.first.name) output = "<li>#{last}<ul>" if last.nil? raise "ElementR

我使用一个字符串在助手方法中创建了一个嵌套的无序列表。代码还可以,但是如果可能的话,我更喜欢使用content-tag方法。以下是我所拥有的:

def show_element_content(element_types, site)
  last = get_element_type_name(element_types.first.name)
  output = "<li>#{last}<ul>"
  if last.nil?
    raise "ElementReturnedNullException - this shouldn't happen."
  else
    element_types.each do |ele|
      if last != get_element_type_name(ele.name)
        last = get_element_type_name(ele.name)
        output << "</ul></li><li>#{last}<ul>"
      end
      output << "<li>#{link_to get_element_content(ele.name), site_element_type_path(site, ele.name)}</li>"
    end
    output << "</ul></li>"
  end
  output.html_safe
end

def get_element_type_name(ele)
  ele.split(" ")[0]
end

def get_element_content(ele)
  words = ele.split(" ")
  words[1..words.size].join(" ")
end
第一个方法是我在视图中输出的方法。它的作用如下:

它用空格分隔每个元素类型,因为每个元素中都有一种类别名称persay作为第一个单词。例如城市、州或特许经营权。这些词在上面的LI标记中。像这样:

<ul>
  <li>City</li>
  <li>State</li>
</ul>
然后它循环遍历每个元素类型,将每个元素类型作为嵌套列表追加。当第一个单词发生更改时,它会关闭嵌套列表和li标记,以创建一个新单词。呈现的html如下所示:

<ul>
  <li>City
    <ul>
      <li>CTA 1</li>
      <li>P1 S1</li>
      <li>P1 S2</li>
      <li>Sub2</li>
    </ul>
  </li>
</ul>

由于我根据各种条件打开和关闭标记,如何使用content_标记完成此操作?我知道在另一个模型中对这些进行分类是有意义的,但我认为仅在表示层中这样做未免太过分了。

为什么要使用帮助器?似乎分部是一种更容易维护和更直接的方法。分部会将逻辑拆分一点,但我不认为它会取消逻辑或简化逻辑。我认为这将导致在观点中加入更多的逻辑。在else条件下,我可以传递该集合并在partial中循环它,而不是元素_类型。但是,我仍然拥有该逻辑。