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

时间:2017-01-04 22:37:46

标签: arrays ruby directory sinatra wiki

我正在Sinatra制作一个维基,我有以下代码,这有效,它只是让我感到有点笨拙。我试图将所有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

如果任何红宝石天才想表现出雄辩的红宝石,我将非常感激!

1 个答案:

答案 0 :(得分:1)

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

最明显的是链式方法调用。这样做也可以实现更多的功能性编程"样式。请注意我是如何用delete_if替换reject(使数组变异)(其中没有)。我也删除了" bang"方法,因为这里不需要使用变异方法。这些不应该是你达到的第一件事,因为它们有时会产生意想不到的效果。

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