0

私は現在、Railsアプリに素晴らしいattachment-fuプラグインを使用していますが、初心者の開発者として、自分が見つけたようなシナリオに遭遇したことはありません。

基本的に、私は2つのレベルでattachment-fuプラグインを使用しています。

  1. ユーザークラスのユーザーアバター用です。
  2. メッセージングシステムでの添付ファイル(PDFなど)を許可することです。

私の質問は、これらの状況で、乾燥していて、明確で、一貫性を保つための最良の使用方法は何であるかということです。

明らかに、両方のクラスでプラグインを定義して実行することは意味がありませんが、先に進んですべてを敬虔なApplicationクラスに設定することについて、私には非常に奇妙なことがあります(おそらく根拠がありません)。

間に何かがありますか、それとも親クラスが進むべき道ですか?

ありがとう!

4

6 に答える 6

3

attachment_fu 設定を 2 回定義する際の DRY 問題は何ですか?

ファイルが同じタイプで同じ場所に保存されていない限り、構成で何も繰り返すことはありません。

確かに、2 つの has_attachment 宣言がありますが、オプションはほとんど異なります (アバター用の宣言と pdf 用の宣言など)。

添付ファイルを処理するコードの 99.99% は attachment_fu ライブラリに埋もれます。構成コードはデフォルトでかなり DRY にする必要があります =)

于 2008-09-17T00:30:42.140 に答える
2

wfarrが説明しているのは、単一テーブル継承です。これは、この状況で現在行っていることです。必要なすべてのattachment_fu列を含むAssetsのテーブルが1つと、実際のモデル名を保持するtypeという追加の列があります。アセットのモデルと、アセットから継承する特定のアップロードタイプの追加モデルがあります。

Asset.rb:

class Asset < ActiveRecord::Base
  ... attachment_fu logic ...
end

avatar.rb:

class Avatar < Asset
  ... avatar specific attachment_fu logic ...
end

pdf.rb:

class PDF < Asset
  ... PDF specific attachment_fu logic ...
end
于 2008-09-17T04:31:45.117 に答える
2

アバターのサポートを完全にGravatarに「アウトソーシング」することはオプションですか?Gravatarによってホストされているアバターを表示するRailsプラグインがいくつかあります。そこで車輪の再発明をする必要はないかもしれません。

于 2008-08-21T14:06:14.040 に答える
1

私は親クラスを使用することに傾倒し、アプリケーションで実際に添付ファイルを使用するさまざまな方法をサブクラス化します。利用可能なDRYestソリューションではないかもしれませんが、論理的なパターンに適しています。

于 2008-08-21T14:12:05.540 に答える
0

価値のあることとして、Patrick Berkeleyは、Paperclipプラグインを介して複数の添付ファイルを処理することで良い仕事をしたと思います。彼はここで彼の仕事の概要を説明しました:

http://gist.github.com/33011

于 2009-01-23T12:29:38.683 に答える
0

Polymorphic Associationsを使用できませんでしたか?

私のアプリで attachment_fu を使用してこれを実行しようとしているので、attachment_fu については正確にはわかりませんが、古い学校のファイル列プラグインの場合は、ポリモーフィック アソシエーションを使用します。

私の「ファイル」モデルは次のようになります。

    class FileUpload < ActiveRecord::Base
      belongs_to :fileable, :polymorphic => true
      file_column :name
    end

ファイルの添付が必要なモデルは次のようになります。

    class Company < ActiveRecord::Base
      has_many :file_uploads, :as => :fileable
    end

File Column は、Safari 3.x で動作しなくなり、メンテナンスされなくなったため、もはや役に立ちません。シンプルで良かったけど…ああ、古き良き時代…

于 2008-09-17T00:44:16.490 に答える