2

単一テーブルの継承に使用される型列を持つレガシー データベースと連携するアプリを作成しています。このデータベースはまだ既存の PHP アプリケーションで使用されているため、そこにあるものを操作する必要があります。このためにいくつかのモデルを設定しようとしていますが、キー テーブルの 1 つが STI スキームと型列で設定されていますが、その列の型はすべて完全に小文字です。

これまでのテストでは、クラス名に一致するように値を変更すると (たとえば、claimant ではなく Claimant)、Rails は type 列で正常に動作します。ただし、本番データベースでこれらの値を変更したくはありませんが、おそらく問題はありません。また、名前を別の方法で保存するためにレガシーアプリに移動して変更する必要もありません...

これを修正するために、2 つの質問があります...

1) type = 'claimant' が class = 'Claimant' にマップされることを認識するようにモデルを構成できる方法はありますか?

2)それができない場合、タイプ列があっても、このテーブルでSTIを使用しないようにレールに指示できる方法はありますか?

私はいくつかのグーグルを行いましたが、まだあまり思いつきません...

4

1 に答える 1

0

STI 設定でこれを試したことはありませんが、レガシー テーブルを使用する場合、ActiveRecord モデルでメソッド「set_table_name」を使用できました。

class Claimant < ActiveRecord::Base
  set_table_name 'claimant'
end

またはカスタムメソッドを使用:

def table_name
  'claimant'
end

申し訳ありませんが、これをテストするのに便利な STI テーブルがありませんが、問題の解決に役立つ可能性があると考えました。

質問の 2 番目の部分への回答として、存在しない列名を指定するだけで、型列を見て Rails を無効にできると思います。

class Claimant < ActiveRecord::Base
  inheritance_column = :_type_column_disabled
end
于 2012-11-20T06:33:51.267 に答える