如何评估每个循环的内容
How to evaluate the contents of an each loop
设置如下:
我有一个装满 yaml 文件的数据文件夹,每个文件都包含关于 post 的元数据。在我的 .erb 模板中,我使用一个简单的 each.do 循环遍历所有这些。
现在,我想要做的不是打印该文件夹中的每个 yaml 文件,而是仅打印 .yaml 内容包含精确字符串的那些文件。
这可能吗?
--
例如,假设我有这样的数据结构
-data
--blogposts
---post1.yaml
---post2.yaml
...
---post100.yaml
然后,对于每个 post#.yaml,为了简单起见,假设它看起来像这样:
---
:id: 1
:title: my example title
:postCategory:
- :id: 1
:categoryTitle:
:Business
在我的模板中,抓取所有 post 的循环显然如下所示:
<% data.blogposts.each do |id, post| %>
*display stuff*
<% end %>
我真正想要的是评估 "blogposts" 中的每个 .yaml 文件,检查是否有与字符串匹配的 categoryTitle 项(这里假设为 Business),如果有,则输出为循环中的项目。目标是我可以在每个 "category page" 上使用它并动态地拉入 post 正在请求的类别。
我会选择这样的东西:
- 收到
yaml
文件后检查并搜索 categoryTitle
.
- 将文件名添加到
master.yaml
文件。
- 阅读
master.yaml
获取我要显示的所有文件的文件名。
这样您就不会每次都在所有文件中循环,您只需浏览一个文件以确定您真正需要打开的文件。
因此您的文件夹结构将多一个文件,例如:
-data
--master.yaml
--blogposts
---post1.yaml
---post2.yaml
...
---post100.yaml
master.yaml
文件结构可能如下所示:
:business:
:post1.yaml
:post3.yaml
:othertitle:
:post2.yaml
:post5.yaml
只需在 master.yaml
中检查具有您想要的标题的文件(例如 business
)并仅循环遍历这些文件(而不是每次都循环所有文件)。
使用 Enumerable#grep,给定 category
<% data.blogposts.each do |id, post| %>
if File.readlines("#{post.name}.yaml").grep(/#{category}/).size > 0
*display stuff*
end
<% end %>
设置如下:
我有一个装满 yaml 文件的数据文件夹,每个文件都包含关于 post 的元数据。在我的 .erb 模板中,我使用一个简单的 each.do 循环遍历所有这些。
现在,我想要做的不是打印该文件夹中的每个 yaml 文件,而是仅打印 .yaml 内容包含精确字符串的那些文件。
这可能吗?
-- 例如,假设我有这样的数据结构
-data
--blogposts
---post1.yaml
---post2.yaml
...
---post100.yaml
然后,对于每个 post#.yaml,为了简单起见,假设它看起来像这样:
---
:id: 1
:title: my example title
:postCategory:
- :id: 1
:categoryTitle:
:Business
在我的模板中,抓取所有 post 的循环显然如下所示:
<% data.blogposts.each do |id, post| %>
*display stuff*
<% end %>
我真正想要的是评估 "blogposts" 中的每个 .yaml 文件,检查是否有与字符串匹配的 categoryTitle 项(这里假设为 Business),如果有,则输出为循环中的项目。目标是我可以在每个 "category page" 上使用它并动态地拉入 post 正在请求的类别。
我会选择这样的东西:
- 收到
yaml
文件后检查并搜索categoryTitle
. - 将文件名添加到
master.yaml
文件。 - 阅读
master.yaml
获取我要显示的所有文件的文件名。
这样您就不会每次都在所有文件中循环,您只需浏览一个文件以确定您真正需要打开的文件。
因此您的文件夹结构将多一个文件,例如:
-data
--master.yaml
--blogposts
---post1.yaml
---post2.yaml
...
---post100.yaml
master.yaml
文件结构可能如下所示:
:business:
:post1.yaml
:post3.yaml
:othertitle:
:post2.yaml
:post5.yaml
只需在 master.yaml
中检查具有您想要的标题的文件(例如 business
)并仅循环遍历这些文件(而不是每次都循环所有文件)。
使用 Enumerable#grep,给定 category
<% data.blogposts.each do |id, post| %>
if File.readlines("#{post.name}.yaml").grep(/#{category}/).size > 0
*display stuff*
end
<% end %>