Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从路径组件构造文件树_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby 从路径组件构造文件树

Ruby 从路径组件构造文件树,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一组文件路径组件,如下所示: [ ['some', 'dir', 'file.txt'], ['other', 'folder', 'here.txt'], ['this', 'one', 'is', 'deeper', 'file.txt'], ['some', 'dir', 'second.txt' ] 因此,数组包含数组,每个数组都包含指向文件的路径组件。内部数组中的最后一个元素始终是文件本身,前面的元素是指向该文件的目录 我想弄清楚的是如何转换上述数据,以便使用和标记轻

我有一组文件路径组件,如下所示:

[ ['some', 'dir', 'file.txt'],
  ['other', 'folder', 'here.txt'],
  ['this', 'one', 'is', 'deeper', 'file.txt'],
  ['some', 'dir', 'second.txt'
]
因此,数组包含数组,每个数组都包含指向文件的路径组件。内部数组中的最后一个元素始终是文件本身,前面的元素是指向该文件的目录

我想弄清楚的是如何转换上述数据,以便使用
  • 标记轻松生成文件树,从而使文件夹相互嵌套,同一文件夹中的文件显示在一起。全部按字母顺序排列

    从上面我想生成以下内容。文件本身必须是指向该文件路径的链接:

    <ul>
      <li>some/
        <ul>
          <li>dir/
            <ul>
              <li><a href="some/dir/file.txt">file.txt</a></li>
              <li><a href="some/dir/second.txt">second.txt</a></li>
            </ul>
          </li>
        </ul>
      </li>
      <li>other/
        <ul>
          <li>folder/
            <ul>
              <li><a href="other/folder/here.txt">here.txt<a/></li>
            </ul>
          </li>
        </ul>
      </li>
      <li>this/
        <ul>
          <li>one/
            <ul>
              <li>is/
                <ul>
                  <li>deeper/
                    <ul>
                      <li><a href="this/one/is/deeper/file.txt">file.txt</a></li>
                    </ul>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
    
    • 一些/
      • 迪尔/
    • 其他/
      • 文件夹/

    谢谢,如果您有任何想法,我将不胜感激。

    粗略概述;尽可能简单(也就是说,不要让事情变得简单:)

    产出:

    {"some"=>{"dir"=>{"file.txt"=>"file.txt", "second.txt"=>"second.txt"}},
     "other"=>{"folder"=>{"here.txt"=>"here.txt"}},
     "this"=>{"one"=>{"is"=>{"deeper"=>{"file.txt"=>"file.txt"}}}}}
    
    创建列表基本上是相同的过程;在散列键上递归。当一个哈希值不是另一个哈希值时,您处于最后一级。您可能还希望按名称和/或类型进行排序,例如,将目录(散列的键值)放在第一位,等等

    你可以玩很多游戏,包括把它转换成几行代码,再加上像deep_merge这样的gems,以减少你必须手动完成的繁忙工作


    这也不会进行任何“健全性检查”以确保数据不是病态的,例如,您可以构造一个数组,将文件名转换为目录,删除带有文件名的目录,等等--这是留给读者的练习。

    非常感谢。这绝对是一个很好的起点。我很感激。
    {"some"=>{"dir"=>{"file.txt"=>"file.txt", "second.txt"=>"second.txt"}},
     "other"=>{"folder"=>{"here.txt"=>"here.txt"}},
     "this"=>{"one"=>{"is"=>{"deeper"=>{"file.txt"=>"file.txt"}}}}}