個人的に私は、未使用のカラムはそれほど大したことではないと思いますが、本当にあなたを悩ますなら、あなたは非正容の解決策を試してみるとよいでしょう。あなたの異なるタイプのユーザーに共通ではないすべての属性を「バケツ」とみなしましたか?私はattr_bucketのようなプラグインの使用について話しています。
基本的にあなたがあなたにDBテーブルを午前余分な列を追加します。
t.text :non_common_attributes
そして、(一般的なクラスから継承)あなたの異なるユーザーモデルのそれぞれに、あなたのようなものだろう:
class UserType1 < User
attr_bucket :non_common_attributes => [:first, :second, :third]
end
class UserType2 < User
attr_bucket :non_common_attributes => [:fourth, :fifth]
end
を
通常の方法で定義したのと同じように属性を使用しますが、モデルをデータベースに保存すると、それらの属性はすべてYAML経由でシリアル化され、:non_common_attributes
列に格納されます。モデルを再度ロードすると、モデルは透過的に逆シリアル化されます。
バケツアトリビュートでインデックスを作成することができないため、バケット属性を使用してユーザーを検索したくないなどのいくつかの注意点がありますが、あなたが何をしているのかシリアライズとデシリアライズのコストについてはあまり心配しませんが、同時に何千ものユーザーをセーブ/ロードする可能性は低いので問題にはならないでしょう。
Infactでは、ほとんどの属性を暗号化する必要のあるモデルで、似たようなソリューションを使用しています(しかし、宝石を使用するのではなく手作業でロールしました)。私はすべての属性をまとめてバケツを暗号化するだけです。
このアプローチを実行する前に、決して実行しないでください。私は私たちの要件を見て、それが適合するかどうかを見ていきます。ありがとう! –