以下是设置:
我有一个包含yaml文件的数据文件夹,每个文件都包含有关帖子的元数据。在我的.erb模板中,我通过一个简单的each.do循环遍历所有这些。
现在,我想要做的,而不是打印该文件夹中的每个yaml文件,只打印.yaml内容包含精确字符串的那些文件。
这可能吗?
- 例如,让我说我有这种数据结构
-data
--blogposts
---post1.yaml
---post2.yaml
...
---post100.yaml
然后,对于每个帖子#.yaml,为了简单起见,让我们说它看起来像这样:
---
:id: 1
:title: my example title
:postCategory:
- :id: 1
:categoryTitle:
:Business
在我的模板中,抓住所有帖子的循环显然如下:
<% data.blogposts.each do |id, post| %>
*display stuff*
<% end %>
我真正想要的是评估&#34; blogposts&#34;中的每个.yaml文件,检查是否有与字符串匹配的categoryTitle项目(让我们说这里有Business),如果所以,输出作为循环中的项目。目标是我可以在每个&#34;类别页面上使用它&#34;并动态地拉入正在请求的类别的帖子。
答案 0 :(得分:1)
对于给定的category
<% data.blogposts.each do |id, post| %>
if File.readlines("#{post.name}.yaml").grep(/#{category}/).size > 0
*display stuff*
end
<% end %>
答案 1 :(得分:0)
我会选择这样的事情:
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
),然后仅循环浏览这些文件(而不是每次都循环播放所有文件)。