2

継承構造が原因で、STI テーブル内のレコードの検索に問題があります。

class User < ActiveRecord::Base

class LegacyUser < User

class AuthUser < User

class SuperUser < AuthUser

class FieldUser < AuthUser

class ClientAdmin < AuthUser

問題は、AuthUser モデルでは find が機能しないことです。クエリはタイプ「AuthUser」を探しており、他の 3 つの可能性は含まれていません。

編集:これをいじっている間、それは機能し始めましたが、ClientAdmin と FieldUser に対してのみ機能するように思われるため、この機能を組み込む必要があるようです。

4

3 に答える 3

3

私はちょうどこの同じ問題に遭遇し、ここで解決策を見つけました。

要するに、問題は、中間抽象クラスがロードされる前にそのサブクラスが何であるかを知る方法がないということです。これを回避するには、そのクラスのファイルの下部にあるすべてのサブクラスを手動でロードできます。

したがって、auth_user.rbの下部にあります。

require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'
于 2011-03-04T02:25:42.997 に答える
2

AuthUserモデルは単独で使用されますか?

継承されたクラス間で共有されるメソッドのクラスのみである場合は、抽象クラスとして設定してみてください。そうすれば、ActiveRecordはそれを直接通過する可能性があります。

AuthUserの宣言に、次のself.abstract_class = trueように追加します。

class AuthUser < User
     self.abstract_class = true
end

それがこのシナリオで機能するかどうかはわかりませんが、試してみる価値はあります。

于 2009-08-18T20:58:37.637 に答える
0

STI が Rails で動作する方法 (「タイプ」と呼ばれるデータベース列にモデル名を格納する方法) により、上記の階層をどのようにサポートできるかわかりません。単一レベルの階層に制限されていると思います。

于 2009-08-18T20:45:10.520 に答える