Rails实现基于数据库的文件系统

时间:2013-05-16 20:22:14

标签: ruby-on-rails ruby filesystems

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

我已经能够实施UserDirectory模型(后者使用Ancestry),我正在前往File } model(我的app只需要一种文件)。

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,因为重定向回同一页面不保留树的展开/折叠状态。

然而,我有这种唠叨的感觉,我正在做一些已经做过很多次的事情。您能否提供这些申请的链接或提供有关实施模型部分和视图部分的提示?

2 个答案:

答案 0 :(得分:5)

关于实施模型部分

的提示

要将模型组织为树结构,tecnique被称为Nested set model,因此常用名称(有助于谷歌搜索等)可以“Activerecord嵌套” ;-)

您对 Ancestry 的选择是受欢迎的,但您可以看看项目(混合,插件等),例如:

对于文件上传'n商店部分,我建议,除了已经提到的 Paperclip 之外,查看carrierwave本身提供了一个存储空间基于“fog” gem(支持使用AWS,Google,Local和Rackspace存储文件),但您可以选择利用carrierwave-activerecord

的数据库(例如sqlite)存储

关于实施视图部分

的提示

关于“{3}}关于this answer关于jQuery File Tree jQuery和dnamique blog可配置AJAX文件浏览器插件的”视图“,该插件具有此插件的rails连接器和来源演示关于它。

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

指向此类应用

的链接

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

  • Boxroom
  • Saphyra(可作为可安装引擎使用)
  • 基于rails的CMS可能包含一些感兴趣的代码

答案 1 :(得分:3)

我认为你走在正确的轨道上。您的DirectoryFile型号对我来说很好。

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

您可能想重新考虑将文件存储在数据库中。这通常是一个坏主意。由于文件的大小可变,因此它们会使您的表变得臃肿并损害性能。我建议您将文件存储在Amazon S3中。这是更加可靠和快速的存储,您可以直接向客户端提供S3 URL,以减少您自己的服务器上的带宽和负载。您可以使用paperclip gem来处理文件上传,并将文件存储在磁盘或S3上。