10

明示的に要求されない限り、Activerecord に blob 列をロードしないように指示するにはどうすればよいですか? 従来の DB には、「通常の」オブジェクトから除外する必要があるかなり大きなブロブがいくつかあります。

4

4 に答える 4

12

レール3を使用してこれに遭遇しました。

幸いなことに、解決するのはそれほど難しくありませんでした。default_scope結果から不要な特定の列を削除するを設定しました。たとえば、私が持っていたモデルには、ほとんどのビューで使用されない非常に長い xml テキスト フィールドがありました。

default_scope select((column_names - ['data']).map { |column_name| "`#{table_name}`.`#{column_name}`"})

ソリューションからわかるように、列を完全に修飾されたバージョンにマップして、属性があいまいになることなくリレーションシップを通じてモデルを使用し続けることができるようにする必要がありました。.select(:data)後で、フィールドを別のフィールドにタックして含めるようにしたい場合。

于 2010-07-18T04:45:16.037 に答える
4

呼び出しで特定の列を読み込むように AR に依頼して、以下を見つけることができると思います。

MyModel.find(id, :select => 'every, attribute, except, the, blobs')

ただし、これは列を追加するときに更新する必要があるため、理想的ではありません。Rails(または単一のSQL選択)で1つの列を明確に除外する方法はないと思います。

次のように書けばよいと思います。

MyModel.find(id, :select => (MyModel.column_names - ['column_to_exclude']).join(', '))

ただし、私の言葉を信じる前に、これらをテストしてください。:)

于 2008-09-18T18:34:28.437 に答える