我使用
Hooks
表示类别,使用 tags
表示我的网站。以下 tags
代码效果很好:
Jekyll::Hooks.register :posts, :post_write do |post|
all_existing_tags = Dir.entries("./src/_tags")
.map { |t| t.match(/(.*).md/) }
.compact.map { |m| m[1] }
tags = post['tags'].reject { |t| t.empty? }
tags.each do |tag|
generate_tag_file(tag) if !all_existing_tags.include?(tag)
end
end
def generate_tag_file(tag)
File.open("./src/_tags/#{tag}.md", "wb") do |file|
file << "---\nlayout: tags\ntag-name: #{tag}\n---\n"
end
end
但是如果我对
category
使用类似的代码,则不会:
Jekyll::Hooks.register :posts, :post_write do |post|
all_existing_category = Dir.entries("./src/_category")
.map { |t| t.match(/(.*).md/) }
.compact.map { |m| m[1] }
category = post['category'].reject { |t| t.empty? }
category.each do |category|
generate_category_file(category) if !all_existing_category.include?(category)
end
end
def generate_category_file(category)
File.open("./src/_category/#{category}.md", "wb") do |file|
file << "---\nlayout: category\ncategory-name: #{category}\n---\n"
end
end
我收到以下错误:
src/_plugins/category_generator.rb:6:in `block in <top (required)>': undefined method `reject' for "test":String (NoMethodError)
tags = post['category'].reject { |t| t.empty? }
任何建议都将受到高度赞赏。
我已经尝试过
tags
但是对于category
它不起作用
从您收到的错误来看,问题似乎来自
post['category']
的类型,它是一个字符串。
post['tags']
是一个数组,Ruby 数组有一个 reject
方法。我猜它的元素是字符串,因为你在它们上调用 empty?
。
由于您似乎期望每个帖子有一个类别(而不是每个帖子有多个标签),因此您可能应该替换
category = post['category'].reject { |t| t.empty? }
category.each do |category|
generate_category_file(category) if !all_existing_category.include?(category)
end
用类似的东西
category = post['category']
generate_category_file(category) unless category.empty? || all_existing_category.include?(category)
这将处理
post['category']
是字符串的情况。
也有可能
post['category']
和 post['tags']
的类型有时是数组,有时是字符串,具体取决于您在前面放置的内容。在这种情况下,您应该在两个钩子中添加条件语句来处理这两种情况(数组情况按照您所做的相同方式,字符串情况按照我建议的方式)