加入新线:在新线上显示

时间:2017-02-02 03:00:19

标签: ruby-on-rails

(编辑:我暂时通过简单地将它放在一张桌子上来解决这个问题,但是我想用明确的每一行造型来做很酷的事情,我觉得我会受限于一张桌子)

我想在视图页面中显示一个字符串数组,每个字符串都在自己的新行上。我的Story模型包含titleauthor_id的列,StoryLine模型包含story_lineline_index和{{ 1}}(我的问题与这个数据结构无关 - 我相信这是我的用例的正确举措)。故事文本由许多行组成,没有句点在新行上分割,因此当输入文本时,我将它们解析到创建操作中的数据库中,如下所示:

story_id

当用户打开一个故事时,所有story_lines = params[:story_text].split("\n") story_lines.each do |line| @story_line = @story.story_lines.build index = story_lines.index(line) @story_line.line_index = index @story_line.story_line = line @story_line.save! end 都会按照索引的顺序通过控制器的show动作中的以下代码显示:story_lines

然后,它们会在视图中显示如下:@story_lines = @story.story_lines.order(:line_index).pluck(:story_line).join("\r\n")

然而,对于我尝试在我的控制器和视图中更改它的许多不同方法,它不会在新行上显示它们。它正在以正确的顺序成功加入它们,但是每个句子都正好碰到下一个句子,在一个句子的最后一个单词和下一个句子的第一个单词之间几乎为零。

关于我应该如何这样做的任何想法?我几乎是肯定的,我可以通过将每个换行符放在一个表的自己的行中来做到这一点,但这似乎是一个廉价的解决方法,应该可以使用<%= @story_lines %>来处理

1 个答案:

答案 0 :(得分:1)

你需要的是更多/更好的HTML:)

问题不在于轨道 - 但事实上,当您抽出一大堆文本时,这就是浏览器中发生的事情。

如果你想在html中出现换行符 - 那么你需要使用增加空格的东西。

您可以使用<br>(字面意思是br代表的)或者您可以使用段落,例如:

<p> <!-- text should always be put inside a block-level object eg a paragraph -->
  <% @story_lines.each do |line| %>
    <%= line %><br> <!-- br example -->
  <% end %>
</p>

<% @story_lines.each do |line| %>
  <p><%= line %></p> <!-- p example -->
<% end %>

显然只选择其中一个或者它会被复制。 :)