古いRailsアプリケーションをRails3.2.11/Ruby1.9.3に移行しています。
別のモデルから継承するモデルActiveRecord
があります。ロードされると、を設定するメソッドを呼び出します。このためには、「イベントID」が必要です(各イベントには独自のデータベースがあります)。ControlPoint
EventDependent
ControlPoint
EventDependent
table_name
このすべての鍵は、モデルがロードされるときに「イベントID」を知る必要があるということです。
にcontrol_point_controller
は、before_filter
(paramsを介して)必要な「イベントID」を取得するコントローラーメソッドを呼び出す必要があります。Railsの以前のバージョンでは、これは常に正常に機能していました。
しかし、Rails 3.2.11では、動作する場合と動作しない場合があります。
それが機能しない場合、問題は、「イベントID」の準備が整う前に、モデルの「テーブル名の設定」が呼び出されることです。デバッガーでデバッグしようとしましたが、その前に失敗するため、フローがbefore_filterアクションに入らないことがよくあります。それが入るときもあります...そしてそれが入るとき、私たちは利用可能なパラメータを持っています、そしてそれはすべてうまくいきます。
私はこれについて探していましたが、関連する特定のものを見つけることができませんでした。問題は、モデルとコントローラーのロード順序が固定されていないことです...そしてそれらは同時にロードを開始し、時には一方が他方の前にロードされることがあります。これは意味がありますか?「eventid」がまだ定義されていないため(before_filterが実行されておらず、paramsがまだ存在していないため)、約70%は機能しないと思いますが、残りの30%は機能します。
私の質問は:モデルのロードをどうにかして遅らせることができますか?または、コントローラーのbefore_filterの後にロードしますか?問題が何であるかについての他の考えはありますか?
必要に応じて、関連するコードを投稿できます。