14

これはおそらくばかげた質問ですが、私はRuby on Railsを初めて使用するので、少しガイダンスを使用できます。ネットワーク操作のグループを実行して結果を返すヘルパー/ユーティリティクラスが必要です。そのクラスはどこに置き、どのように使用しますか。

app / modulename/helpersディレクトリにnetwork_helper.rbを作成しました。私がやろうとすると私のコントローラーで

  myNetworkHelper = ModuleName::NetworkHelper.new
  results = myNetworkHelper.getResults

エラーが発生します

 undefined method `new' for MyModule::NetworkHelper:Module

これは、RubyonRailsがどのように機能するかについての誤解にすぎないと確信しています。説明をお願いできますか?

これをモジュールではなくクラスにして、libsに入れる方が良いでしょうか?また、ライブラリにサブフォルダーを追加して、それらを自動的にロードすることはできますか?

4

4 に答える 4

7

LibまたはClasses

このような小さなユーティリティクラスは通常libフォルダーにありますが、classesというフォルダーを作成することを好む人もいます。どちらを選択した場合でも、libフォルダーは自動ロードされないため、config/application.rbにフォルダーをインポートしてください。

config.autoload_paths += %W(#{config.root}/lib)

懸念

ユーティリティクラスの代わりに、再利用可能なコードでモデルの一部を拡張したい場合は、再利用可能なモジュールを抽出するように促す新しいRails4関連フォルダーも確認することをお勧めします。

参照:Rails4で懸念事項を使用する方法

于 2013-07-15T09:45:40.400 に答える
3

を使用するnewには、それを呼び出すものがモジュールではなくクラスである必要があります。モジュールを使用しています。に変更moduleします。classlib/utilities/network_utility.rb

于 2013-03-10T04:22:33.983 に答える
1

現時点ではこれを確認できませんが、カスタムモジュールとクラスを保存できる場所の1つはlibディレクトリだと思います。appまたは、 environment.rbに次の行を追加することで、指定した方法でディレクトリに保存できるはずです。

config.load_paths << File.join(Rails.root, "app", "modulename")

また、イェフダ・カッツの回答をチェックしてください。これは、あなたの質問によく答えるだけでなく、あなたの状況に関連する非常に興味深く有用な情報や概念も含まれていると思います。お役に立てば幸いです。

于 2013-03-10T03:54:51.320 に答える
0

自動読み込みパスを変更しないように、クラスをapp/libの代わりにフォルダに追加してください。lib

説明:

受け入れられた答えは、クラスをに追加することを提案していますlib

しかし、この議論によると:

Rails 3以降、libフォルダーは自動ロードパスに属していません。

したがって、libautoloadパスの下に追加することはお勧めしません。app/lib代わりに使用してください。

于 2020-05-24T11:41:41.693 に答える