获取文件夹中的所有文件并将其显示为我的 sinatra 应用程序主页上的链接

Getting and displaying all files in a folder as links on the home page of my sinatra app

我正在用 Sinatra 制作一个 wiki,我有以下代码,它可以工作,只是让我觉得有点笨拙。我正在尝试获取 "pages" 中保存的所有 wiki 条目,并将它们作为链接显示在主页上。

get "/" do
  @entries = Dir["pages/*.txt"]
  @entries.map! { |f| f.split '/' }
  @entries.flatten!
  @entries.delete_if { |p| p == "pages" }
  @entries = @entries.sample(5)
  erb :welcome, layout: :page
end

如有ruby天才愿意示范eloquentruby不胜感激!

  @entries = Dir["pages/*.txt"].
               map { |path| path.split '/' }.
               flatten.
               reject { |path| path == 'pages' }.
               sample(5)

最明显的是链接方法调用。这样做也会导致更多 "functional programming" 风格。请注意我是如何用 reject(不改变数组)替换 delete_if(改变数组)的。我还删除了 "bang" 方法,因为这里不需要使用变异方法。这些不应该是您首先要做的事情,因为它们有时会产生意想不到的效果。

例如,我最近发现一位同事写了 return string.gsub!(" ", "") 或类似的东西。问题是 gsub! returns 无。使用 gsub 代替有效。