【问题标题】:Can a string be broken into multiple paragraph elements while iterating in Rails 4?在 Rails 4 中迭代时,字符串可以分成多个段落元素吗?
【发布时间】:2023-03-18 15:05:02
【问题描述】:

在学习 Rails 时,我正在从头开始构建博客,但遇到了一个问题:在我的 Post 模型中,我有一个表单,发帖人可以在其中添加标题、类别标签和帖子入口。这些都作为字符串添加到表中。

这就是事情变得棘手的地方。与任何博客文章一样,entry(文章的实际文本)字符串可能会有多个句子。出于这个原因,当我在视图中循环 Entry 内容时,它会将帖子显示为一个文本块,我这样做是这样的:

<% @posts.each do |post| %>
    <div class="row">
            <h2><%= post.title %></h2>
            By <h7><%= post.author %></h7> at <h7><%= post.published_at %></h7>
            <p id="paragraph"><%= post.entry %></p>
    <% end %>

所以从技术上讲,内容正在显示:它有一个标题、帖子信息和条目,但是entry 的这个长文本块看起来很糟糕。

我想做的是能够将&lt;p&gt;&lt;%= post.entry %&gt;&lt;/p&gt; 拆分为多个段落,假设我自己制作了降价并在提交文本时放置# 以指示新段落。

我找到了this old post,它在拆分数组方面几乎是完美的,除了它需要您设置有限数量的迷你字符串(就像应该从原始字符串中切出 3 个字符串一样)。

由于其中一些博客文章最终可能有 2、3、4 等段落,因此我需要一个能够正确格式化的解决方案。

我看到了两种可能的解决方案,这是我的问题:

1) 设置Post 表是否有比为帖子内容设置一个长字符串更好的格式?

2) 如果没有,当字符串实际呈现在视图中时,我该怎么做才能使字符串从样式角度更易于管理?

可能的问题

1.为什么不直接使用 Gem? 这是公平的。我想尝试或多或少地从头开始制作这个项目,以供我自己学习,因为我是新手。这就是为什么我想尝试构建 Post 模型并制作一个用于提交条目的直观 UI。

2.我可以看看迁移文件的样子吗?

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :category
      t.string :title
      t.datetime :published_at
      t.integer :user_id
      t.string :author
      t.string :entry

      t.timestamps null: false
    end
  end
end

【问题讨论】:

  • 段落的定义(大致)是“几个相关的句子”。这种关系是语义的,而不是技术的。也就是说,您如何根据“正确格式”定义段落?这种区别可能看起来很迂腐,但它对你的用户很重要,所以对你也很重要。
  • 通常你会对内容使用markdown之类的东西,然后你会用github.com/vmg/redcarpet之类的东西来渲染它
  • @MarsAtomic,是的,好点。当我说段落时,我的字面意思是“进入多个

    元素”。我的推理 - 显然有更复杂的样式 - 但这会在呈现时破坏文本。因此,如果我想要三个文本块,渲染为三个

    元素将是一个好的开始。目前,它只能作为一个来做。

标签: ruby-on-rails


【解决方案1】:

Rails 的simple_format 助手是一个简单的起点。

<%= simple_format post.entry %>

它将一个换行符格式化为&lt;br /&gt;,将两个连续的换行符格式化为一个新段落。

所以这个输入:

Hi
I'm on a

new paragraph

格式如下:

<p>
  Hi<br />
  I'm on a
</p>
<p>
  new paragraph
</p>

如果您想更高级,也可以考虑稍后集成 Markdown 解析器。

【讨论】:

  • 实施了这个策略并结合其他答案使用text而不是string,并且效果很好。好建议!
【解决方案2】:

强烈建议不要使用string,而是使用text 作为:entry 的数据类型

t:text :entry

这是因为大多数数据库类型将字符串限制为 255 个字符,但文本最多可以有 4,294,967,296 个字符。

更多信息在这里:Difference between string and text in rails?

【讨论】:

  • 我以前不知道的重要区别。做出改变。谢谢。
  • 我的荣幸。本周我在自己的博客上工作时才发现。
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多