1

Rail の行方不明の定数のオートロードにはうんざりしています。Ruby では、2 つのクラスがあり、一方が他方の内部にネストされているが別のファイルにある場合、両方が相互に依存しているため (循環依存)、どうすればそれらを要求できますか。

# user.rb
class User < ActiveRecord::Base
   serialize :preferences, User::Preferences
end

# user/preferences.rb
class User::Preferences
end

# user_spec.rb    
require 'user'
require 'user/preferences'

注: Rails 環境は必要ありません。

最初にユーザーを読み込もうとすると、コードはまだ認識されていないため失敗しますUser::Preferences。最初に「user/preferences」をロードすると、既存の User クラスが ActiveRecord をサブクラス化していないため、User をロードするときに失敗します。

循環依存関係を削除するか、可能であれば、 必要に応じて定数に変換されるserialize文字列を渡して、クラスを遅延ロードする必要があるのではないかと疑っています。'User::Preferences'

4

2 に答える 2

2

私が持っているハックの 1 つは、user/preferences.rb で ActiveRecord::Base から継承する空の User クラスを作成することです。

class User < ActiveRecord::Base; end

class User::Preferences
end
于 2013-04-01T00:27:35.187 に答える