[解決済み] Rails /libモジュールと
2023-05-25 07:27:57
質問
のカスタムラッパーを書いています。
open_flash_chart
プラグインのカスタムラッパーを書いています。これは
/lib
にモジュールとしてロードし
ApplicationController
.
しかし、私はいくつかのクラスの階層か何かの問題があります。
どのコントローラからも
open_flash_chart
という関数にアクセスできます。
OpenFlashChart
,
Line
など
しかし、クラス内で
/lib
モジュール内のクラスでは、うまくいきません。
何かアイデアはありますか?
どのように解決するのですか?
Railsでファイルが読み込まれる方法は2つあります。
-
autoload処理で登録され、そのファイル名に対応する定数を参照する。例えば
app/controllers/pages_controller.rb
で、PagesControllerを参照します。app/controllers/pages_controller.rb
が自動的に読み込まれます。これはロードパスのディレクトリのプリセットリストに対して起こります。これはRailsの機能であり、通常のRubyのロード処理の一部ではありません。 -
ファイルは明示的に
require
d. もしファイルがrequire
d である場合、Ruby はロードパスの全リストを調べて、最初にrequire
d がロードパスの中にある最初のケースを見つけます。ロードパス全体を見るには、$LOAD_PATH ($: の別名) を検査することで可能です。
ということは
lib
がロードパスにあるので、2つの選択肢があります。定数と同じファイル名を付けて、問題の定数を参照したときにRailsが自動的にそれらを拾うようにするか、明示的にモジュールをrequireするかです。
また、もうひとつ混乱しそうなことに気づきました。ApplicationControllerは ではなく であり、システムのルートオブジェクトです。観察してください。
module MyModule
def im_awesome
puts "#{self} is so awesome"
end
end
class ApplicationController < ActionController::Base
include MyModule
end
class AnotherClass
end
AnotherClass.new.im_awesome
# NoMethodError: undefined method `im_awesome' for #<AnotherClass:0x101208ad0>
このモジュールを使用したいクラスにインクルードする必要があります。
class AnotherClass
include MyModule
end
AnotherClass.new.im_awesome
# AnotherClass is so awesome
もちろん、そもそもモジュールをインクルードできるようにするためには、(上記のテクニックのいずれかを使って)モジュールを利用できるようにしておく必要があります。
関連
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] ローカルにインストールされたPythonモジュールの一覧を取得するにはどうしたらいいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] 親フォルダからモジュールをインポートする
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] クラスとモジュールの違い
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】Rails 4 認証トークン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] pg gem をインストールしようとすると 'libpq-fe.h' ヘッダが見つからない
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み】Rails 3でlibフォルダからモジュール/クラスをロードする最良の方法?
-
[解決済み] Ruby on Rails 3でモジュールを作成し、使用するには?