汎用タイプを作成し、STI(Single Table Inheritance)を使用してサブタイプを作成することができます。サブタイプが非常に異なっていると感じない限り、いくつかのサブタイプには空の列がたくさんあり、他のタイプはそうでないと、これは最善の方法と思われます。セキュリティの観点からは、実際にどのような意味で大きなインパクトがあるのか分かりません。
class FileUpload < ActiveRecord::Base
end
class Video < FileUpload
end
class Image < FileUpload
end
class Document < FileUpload
end
しかし、これをしないと合理的なケースがあります。通常、継承の経験則は、あるものが型である場合ですが、この場合は灰色の領域があります。あいまいさは、ドキュメントがアップロード可能なファイルのタイプであるが、そのタイプのビデオではないという事実から来ている。だから、ビデオと同じようにアップロード可能なファイルの動作を持たせたいが、類似性が止まったファイルの動作をしたい。したがって、より良いルートはおそらく、アップロード可能なmoduleを作成して、すべての欲求共有行動を持ち、それを3つのモデルに含め、それらをすべて自分のものにすることです。
module Uploadable
end
class Video < ActiveRecord::Base
include Uploadable
end
class Image < ActiveRecord::Base
include Uploadable
end
class Document < ActiveRecord::Base
include Uploadable
end
これは、慣例の範囲外の、より複雑な問題の1つです。この問題(STI、MTI、動的列など)を解決する方法はたくさんありますが、それぞれ独自の長所と短所があります。 – max