私は状況があります。私は古いシステムを持っており、コードをRailsに置き換えています。 テーブルは縮小されていますが、古いシステムでは約20のフィールドがありますが、この新しいソフトウェアでは5つのフィールドしか使用せず、しばらくしてから他のフィールドをすべて削除します。Rails古いデータベースとの統合
デフォルトでは、railsはormと考えられるテーブルのすべての行をマップします。どのように私はActiveRecordの下にマップしたいフィールドを選択することができますか?
おかげ
私は状況があります。私は古いシステムを持っており、コードをRailsに置き換えています。 テーブルは縮小されていますが、古いシステムでは約20のフィールドがありますが、この新しいソフトウェアでは5つのフィールドしか使用せず、しばらくしてから他のフィールドをすべて削除します。Rails古いデータベースとの統合
デフォルトでは、railsはormと考えられるテーブルのすべての行をマップします。どのように私はActiveRecordの下にマップしたいフィールドを選択することができますか?
おかげ
私は作成していないデータベースで、レールの外でActiveRecordを使用するとき、(ハッキー)ソリューションを使用しました。基本的に私はActiveRecordコードを掘り下げ、フィールドのマッピングを容易にするために、クラスmethod :: column_namesを利用することを見出しました。他の人が指摘しているように、データベースから削除しようとしているモデルのフィールドを使用しないだけでうまくいくでしょう。しかし、Dbの構造がActiveRecordでうまく動作しない予約語を使用する可能性があります。 ActiveRecordから 'class'フィールドを隠すために次のコードを追加しました。なぜなら、 'class'は予約された名前であり、あらゆる種類のエラーを発生させていたからです。
あなたはもちろんのように返される配列の何かから複数のキーを削除するには、これを変更することができprivate
def self.column_names
orig = super
orig.delete('class')
return orig
end
:これは、私は同じことをするだろう、 /salernost
あなたが本当にちょうどそれらを使用していない、とあなたがそれらを削除するときに、何も壊していないだろう、それらを排除する必要はありませんので、ActiveRecordのは、動的にRubyのメソッドにフィールドをマップします。
を助け
private def self.column_names orig = super ['class', 'field_one', 'field_two'].each do |field_name| orig.delete(field_name) end return orig end
・ホープ無視されたフィールドがnull/nilを受け入れるように設定されていることを確認する必要があります –
しかし、この場合、オブジェクトをparamsで設定するとセキュリティ上の問題が発生する可能性があります。たとえば、フィールド価格。このフィールドは古いシステムによってのみ設定され、新しいフィールドはプロジェクトの設定コストを設定します。たとえば、パラメータ値を設定すると、レールは自動的にパラメータを保存します。これには回避策がありますか? –
ありがとうございました!それでおしまい。 –