0

状況があります。私は古いシステムを持っていて、コードをRailsに置き換えています。したがって、テーブルはコントラクトであり、古いシステムでは約20のフィールドがありますが、この新しいソフトウェアに組み込まれたRailsでは、5つのフィールドのみを使用し、しばらくすると他のすべてのフィールドを削除します。

デフォルトでは、railsはテーブルthoughtormのすべての行をマップします。ActiveRecordでマップしたいフィールドを選択するにはどうすればよいですか?

ありがとう

4

2 に答える 2

2

ActiveRecord はフィールドを動的に Ruby メソッドにマップするので、実際にはそれらを除外する必要はありません。単にそれらを使用しないでください。それらを削除しても何も壊れません。

于 2012-04-20T13:43:10.083 に答える
1

作成できなかったデータベースでレールの外で ActiveRecord を使用するときに、(ハッキーな) ソリューションを使用しました。基本的に、ActiveRecord コードを掘り下げたところ、クラス メソッド ::column_names を利用してフィールドのマッピングを容易にしていることがわかりました。他の人が指摘しているように、データベースから削除する予定のモデルのフィールドを使用しないだけで問題なく機能します。しかし、Db の構造が予約語を使用している可能性があります。これは、ActiveRecord では適切に機能しません。「class」は予約済みの名前であり、あらゆる種類のエラーが発生していたため、ActiveRecord から「class」フィールドを非表示にする次のコードを追加しました。

private
def self.column_names
  orig = super
  orig.delete('class')
  return orig
end

もちろん、これを変更して、返された配列から複数のキーを次のように削除できます。

private
def self.column_names
  orig = super
  ['class', 'field_one', 'field_two'].each do |field_name|
    orig.delete(field_name)
  end
  return orig
end

これがお役に立てば幸いです、/salernost

于 2012-04-20T14:35:14.253 に答える