7

「ファイル システム」と「Rails」は一緒でも別でも非常に一般的なトピックであるため、データベースにファイル システムを実装するRuby on Railsオープン ソース アプリを見つけることができません。このようなアプリケーションを出発点またはテンプレートとして使用したいと思います。

私はすでにモデルUserDirectoryモデルを実装することができ (後者にはAncestryFileを使用)、モデルに向けて進んでいます (私のアプリは 1 種類のファイルのみを必要とします)。

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

モデル部分の実装に関するヒント

モデルをツリー構造として編成するための手法は、ネストされたセットモデルとして知られているため、一般的な名前(グーグルなどに役立つ)は「アクティブレコードネスト」である可能性があります;-)

Ancestryについての選択は大歓迎ですが、次のようなプロジェクト (ミックスイン、プラグインなど) を見ることで利益を得ることができます。

ファイルのアップロードと保存の部分については、前述のPaperclipに加えて、 carrierwave自体を見て、 「fog」 gemに基づくストレージを提供することをお勧めします (AWS、Google、Local、および Rackspace でのファイルの保存をサポートします)。Carrierwave-activerecord を利用したデータベース (sqlite など) ストレージを選択できます

ビュー部分の実装に関するヒント

「ビュー」については、 jQueryファイルツリーに関するこの回答に興味があるかもしれません.jQuery用の構成可能なAJAXファイルブラウザプラグインと、このプラグイン用のレールコネクタとソースとそれに関するデモがあるdnamiqueブログ

別の方法として、次のセクションで説明するアプリケーションの実装 (ソース) を参照してください。

そのようなアプリケーションへのリンク

ここで、興味深い「ファイルマネージャー」をいくつか示します。

  • ボックスルーム
  • Saphyra (搭載可能なエンジンとして利用可能)
  • Rails ベースの CMS には興味深いコードが含まれている可能性があります
于 2013-05-23T16:55:55.287 に答える
3

あなたは正しい軌道に乗っていると思います。あなたDirectoryFileモデルは私にはよく見えます。

あなたのしつこい気持ちは部分的に正しいです。ファイルのアップロードと保存をサポートすることは一般的な要件ですが、階層ディレクトリ構造全体をモデル化して表示することはそれほど一般的ではありません。

ファイルを実際にデータベースに格納することを再検討することをお勧めします。これは通常、悪い考えです。ファイルは可変サイズであるため、テーブルが肥大化し、パフォーマンスが低下する可能性があります。ファイルを Amazon S3 に保存することをお勧めします。これははるかに信頼性が高く高速なストレージであり、S3 URL をクライアントに直接提供して、帯域幅と独自のサーバーの負荷を削減できます。paperclip gem を使用して、ファイルのアップロードを処理し、ファイルをディスクまたは S3 に保存できます。

于 2013-05-23T05:53:45.403 に答える