7

因为“文件系统”和“rails”是这样共同的主题,既在一起又分开,我找不到任何在数据库中实现文件系统的Ruby on Rails开源应用程序。我想使用这样的应用程序作为起点或模板。

我已经能够实现UserDirectory模型(后者使用Ancestry),并且我正在寻找File模型(我的应用程序只需要一种文件)。

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation
  has_secure_password
  has_many :directories, dependent: :destroy
  # ...
end # class User

class Directory < ActiveRecord::Base
  attr_accessible :name, :parent_id
  has_ancestry
  belongs_to :user
  has_many :files, dependent: :destroy
  # ...
end # class Directory

# not actually implemented, yet
class File < ActiveRecord::Base
  attr_accessible :name
  belongs_to :directory
  # ...
end # class File

在视图中,我使用jsTree来呈现树以及添加/删除、编辑、...的表单。这将需要更改为使用AJAX,因为重定向回同一页面不会保留树的展开/折叠状态。

然而,我有一种挥之不去的感觉,我正在做一些已经做过很多次的事情。您能否提供此类应用程序的链接或提供有关实现模型部分和视图部分的提示?

4

2 回答 2

5

关于实现模型部分的提示

为了将模型组织为树结构,该技术被称为嵌套集模型,因此一个通用名称(有助于谷歌搜索等)可能是“Activerecord 嵌套” ;-)

欢迎您选择Ancestry,但您可以通过查看项目(混合、插件、...)受益,例如:

对于文件上传和存储部分,我建议除了已经提到的Paperclip之外,单独查看carrierwave提供了基于“雾” gem 的存储(支持使用 AWS、Google、Local 和 Rackspace 存储文件)但是您可以选择利用carrierwave-activerecord的数据库(例如sqlite)存储

关于实现视图部分的提示

关于“视图”,您可能对有关jQuery File Tree的答案感兴趣,这是一个可配置的 AJAX 文件浏览器插件,适用于 jQuery 和dnamique 博客,它有一个用于此插件的 rails 连接器以及有关它的源代码演示

作为替代方案,请查看下一节中提到的应用程序的实现(来源)。

此类应用程序的链接

这里有一些感兴趣的“文件管理器”

  • 储藏室
  • Saphyra(可作为可安装发动机)
  • 基于 rails 的 CMS 可能有一些有趣的代码
于 2013-05-23T16:55:55.287 回答
3

我认为你在正确的轨道上。你DirectoryFile模型对我来说看起来不错。

你唠叨的感觉是部分正确的。支持上传和存储文件是一个常见的需求,但建模和显示整个层次目录结构并不常见。

您可能需要重新考虑将文件实际存储在数据库中。这通常是个坏主意。由于文件的大小如此可变,它们可能会使您的表格膨胀并损害性能。我建议将您的文件存储在 Amazon S3 中。这是更加可靠和快速的存储,您可以将 S3 url 直接提供给客户端,以减少您自己服务器上的带宽和负载。您可以使用回形针gem 来处理文件上传并将文件存储在磁盘或 S3 上。

于 2013-05-23T05:53:45.403 回答