You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jekyll Hooks处理分类时出现reject方法未定义错误求助

解决Jekyll Hooks处理分类时的undefined method 'reject'错误

错误原因很明确:你的代码里post['category']返回的是字符串类型(比如报错里的"test"),而reject是Ruby数组的方法,字符串没有这个方法,因此触发NoMethodError。

对比标签处理逻辑能发现,Jekyll中post['tags']默认是数组类型(支持多标签),所以可以直接调用reject;但category默认是单个字符串(单分类场景),因此不能直接用数组方法。

修复后的分类处理代码

Jekyll::Hooks.register :posts, :post_write do |post|
  all_existing_categories = Dir.entries("./src/_category")
    .map { |t| t.match(/(.*).md/) }
    .compact.map { |m| m[1] }

  # 把category统一转成数组,兼容单分类(字符串)和多分类(数组)场景
  categories = Array(post['category']).reject { |c| c.empty? }
  categories.each do |category|
    generate_category_file(category) if !all_existing_categories.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

关键改动说明

  • 统一类型为数组:用Array(post['category'])把字符串类型的分类转为单元素数组,即使未来改成多分类(数组格式),代码也能兼容。
  • 变量名优化:把原代码里的category变量改成categories(复数),循环内用category作为单个分类的变量,避免变量名重复导致的逻辑混淆。
  • 空值过滤:转成数组后再用reject过滤空字符串,确保不会生成空分类的文件。

另外需要确认:你的分类目录是./src/_category,而Jekyll默认的分类目录是_categories(复数),如果后续生成的分类页面无法正常渲染,检查目录名是否符合Jekyll的约定。

内容的提问来源于stack exchange,提问作者Murat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:13:15