生データを取得する必要があるレガシーデータベースが多数あります。データベース内の各テーブルには、任意の名前とフィールドの任意のコレクションがあります。私は、次のクラスでこれらのフィールドへのアクセスを取得されていた:私は、テーブル名を知っている私のコード内のポイントに達するとレガシーテーブルでのActiveRecordクラスの使用
class Frt < ActiveRecord::Base
establish_connection :legacy
set_primary_key "point"
end
は、私が呼び出すことができます。
はFrt.set_table_name "table"
t = Frt.find_by_sql("blah")
something = t.field_name + t.other_field_name
etc...
問題があることです私はこれが最初に選択するテーブルにアクセス可能なフィールド名をロックすることに気づいた。 `set_table_name 'メソッドの別の呼び出しでテーブルを変更しようとすると、そのクラスの属性が変更されますが、新しいインスタンスには最初のものと同じフィールドセットが残ります。これまでのところ、私のアプリでは何もする必要はありませんでしたが、私は道に突き当たるところで私を噛むことがわかっている方法でプログラムを拡張しています。
私は `Frt.send:set_table_name" new_table "を試して、ActiveRecordに再び魔法をさせることを期待しました。それはしません。
どのようにActiveRecordの便利さを保つことができるかもしれないが、ロードする必要があるテーブルのフィールドを動的に再マップできるようになる人はいますか?
残りのコードを投稿できますか?あなたはどこでActiveRecordオブジェクトを作成しますか? – sethvargo
これは私が上記のものではありませんか? 't = Frt.find_by_sql( "blah")' –