問題タブ [activesupport-concern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails ActiveSupport::懸念事項とメソッドの評価
current_user
ヘルパーでDeviseを使用するこのアプリケーションがあります。モジュールを作成すると、それが決して起こらないのに、それへの帰属を言及した後にcurrent_user
なります。nil
そしてModuleTest :
出力:
ただし、この行を削除/コメントアウトすると# current_user = nil if false
、current_user
有効なままになります。
これは、遅延評価と多少関係がありますか?
編集
全体の問題は、ステートメントが評価されない場合に Ruby が変数を定義する方法に依存しています。
これは下でどのように機能しますか?
ruby - 「ホスト」クラスが完全にロードされた後に懸念コードを実行する
バックグラウンド
次のような ActiveRecord の懸念があります。
これを実行すると (よく似たようなものです)、"hello" 例外が発生します。これは、 の時点でinclude Xyz
カスタム テーブル名がまだ設定されていないため table_exists?
ですfalse
。
行を切り替えると、すべてが正常に機能します (つまり、例外はありません)。
質問
現在の動作 (どちらの場合も) はまったく問題なく、予想どおりですが、発信者にとっては少し不快です。
「ホスト」クラスが完全にロードされるまでコード (この不自然な例では、 ) が遅延するようにモジュール定義を変更する方法はありますか?raise
ruby-on-rails - Railsのロークラフトの懸念により、モジュールの定数が失われるのはなぜですか?
Rails 4.2 で一定の "Complete" を使用する Orderable の問題があります。app/models/concerns/orderable.rb
:
Rails コンソールで を実行するOrderable.constants
と、 が返されます[:COMPLETE]
。ただし、Orderable の問題をRailsに関するモジュールで説明されている「控えめな」スタイルに変更すると、次のようになります。
その後Orderable.constants
、Rails コンソールで実行すると が返されます[]
。Railsのドキュメントには、「懸念事項を定義するための簡単な近道は...同等である」と書かれています。この単一の変更が、モジュールの定数へのアクセスを失うという影響を与えるのはなぜですか? どういうわけかそれらを再定義する必要がありますか?