2

レールでは、これを行うことができます:

TableName.column_names

すべてのテーブルの列名の配列を文字列として取得します。

いくつかの合理化されたルビーのような方法で、数値であるテーブルのすべての column_names を取得する方法はありますか? それともすべてフロートですか?それとも弦など?

現在、作業しているテーブルの数値以外のすべての列名を見つけて、すべてのテーブルの列名のリストから配列としてそれらを次のように差し引いています。

cols = TableName.column_names - ["name", "created_at", "location", ... ]

100 を超える数値列があるため、これが現在の私の最善の解決策ですが、ハックのように感じます

4

1 に答える 1

5

これはトリックを行います:

ModelClass.columns.select{ |c| c.type == :integer }.map(&:name)

によって返される列オブジェクトには#columns、スキーマに存在するほとんどの情報が含まれています。これには、それらの型、null 許容かどうか、既定値があるかどうかなどが含まれます。

このリストには、たとえば、関連付けを参照するために使用されるid列とすべての列が含まれることに注意してください。をチェックxyz_idして除外できますが、列はスキーマの観点からは「特別」ではないため、手動でブラックリストに登録する必要がある場合があります。(誤って不要な列をリストに含めて悪いことが起こる場合、より安全な方法は、スキーマのイントロスペクションを忘れて、必要な列のホワイトリストを維持することです。)id#primaryxyz_id

于 2013-07-31T21:05:49.020 に答える