类别的 Jekyll Hooks 给出“post['category'].reject { |t| t.empty? }”错误

问题描述 投票:0回答:1

我使用

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
它不起作用

tags jekyll hook categories
1个回答
0
投票

从您收到的错误来看,问题似乎来自

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']
的类型有时是数组,有时是字符串,具体取决于您在前面放置的内容。在这种情况下,您应该在两个钩子中添加条件语句来处理这两种情况(数组情况按照您所做的相同方式,字符串情况按照我建议的方式)

© www.soinside.com 2019 - 2024. All rights reserved.