Rails:保持simple_format不向列表添加换行符?

时间:2011-02-08 20:59:14

标签: ruby-on-rails text format helper

这是输入HTML:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

如果我通过Rails'simple_format传递,则输出为:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>

<p><ul>
<br />  <li>Item 1</li>
<br />  <li>Item 2</li>
<br />  <li>Item 3</li>
</ul></p>

<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

注意每个列表项之前的<br />

如何让simple_format不这样做?

最终我要做的是在尚未包含在某种标签中的内容周围添加段落标签(即.blockquote,ul,ol)。

3 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。以下是解决方法!

将simple_format输出包装在div中,如下所示:

<div class="single-spacing">
  <%= simple_format @your_content %>          
</div>

然后将其添加到您的CSS文件中:

.single-spacing {
  ul br {
    display: none;
  }
}

或者,当您在列表中实际需要一些br时,可以添加此CSS:

.single-spacing{
  ul li br:first-child, ol li br:first-child {
    display: none;
  }
}

我尝试将它作为一个类添加到simple_format本身(这是一个选项),但由于某种原因它没有工作。把它放在DIV中会。

不确定为什么simple_format会将这些额外的内容添加到一个简单的列表中,但是嘿嘿。

迈克尔

答案 1 :(得分:0)

据我所知,simple_format旨在解决换行符'\ n'(在按下回车键时创建)

simple_format为\ n创建<br />,为\ n \ n

创建<p>

simple_format并非真正用于处理现有的html输入,而是用于数据库和文本字符串等的text_area字段。

请参阅rails docs以获取示例:ActionView - simple_format

一些建议可能只是使用content_tag包装整个输入:

    <%= content_tag :p, :class => "strong" do -%>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

      <ul>
       <li>Item 1</li>
       <li>Item 2</li>
       <li>Item 3</li>
     </ul>

     Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    <% end -%>

或者如果可能的话,可以格式化你的html而没有换行符:

  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

  <ul> <li>Item 1 </li> <li>Item 2</li> <li>Item 3</li> </ul>

  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

这些都是非常hackish,最好的解决方案是将所有输入存储为html,然后才能调用它们进行显示。但不知道如何获得输入,很难建议这样做。

答案 2 :(得分:0)

您可以尝试停用清理参数

simple_format html_input, {}, sanitize: false}

它会起作用,但你应该记住没有消毒