29

私はこれらの議論に関するいくつかの文書を読みましたが、それらが何であるか、それらの違いは何か、そしてそれらの1つが私のニーズに合うかどうかを明確に理解していませんでした。

他のアプリケーションにプラグインできるアプリケーションを作成する必要があり、それを他のアプリケーションにgemとして含めたいと思います。基本的に、いくつかのモデルが必要です。1つはコントローラーで、ビューはありません。さらに、初期化、ホスティングアプリとジェネレーターからの構成パラメーターのサポートが必要です。

私は正しい道を進んでいますか?

それを行う方法を理解するために私は何を読むべきですか?

アップデート:

afの詳細がたくさんあるとても素敵な記事がここにあります。

基本的に:

RailtieはRailsフレームワークのコアであり、Railsを拡張したり、初期化プロセスを変更したりするためのいくつかのフックを提供します。

Rails :: Engineは、いくつかの初期化子がすでに設定されているRailtieにすぎません。また、Rails::ApplicationとRails::Pluginはエンジンであるため、ここで説明するのと同じ構成を3つすべてで使用できます。

4

2 に答える 2

8

Railtieはおそらくあなたが説明したことを実行できますが、エンジンを使用する方が望ましい場合があります。エンジンは独自の構成を持つことができ、通常のRailsアプリと同じ方法でコントローラー、ビュー、モデルを含む/ appディレクトリを含めることができるため、Railsアプリケーションのように機能します。

詳細については、このブログをお読みください

于 2011-06-28T19:22:00.903 に答える
7

Rails::Engineからすべての機能を継承し、Rails::Railtieさらにいくつかを追加します(Engine < Railtieソースコード[ソース内のドキュメントはかなり良いです])。

基本的に、railtie(==から継承するクラスRails::Railtie)は、Railsアプリプロセスと対話するために必要なすべてを提供します。
そしてエンジン(==から継承するクラスRails::Engine)はrailtie +です

  • 一部のイニシャライザーセット(initializerメソッドの助けを借りて):エンジンのRailsアプリのようなフォルダー構造を実際のアプリにロードできるようにします。

    エンジンは、を実際のアプリに自動的にロードapp/modelsし、からルートをロードし、からロケールをロードし、からタスクをロードします。app/controllersapp/helpersconfig/routes.rbconfig/locales/*lib/tasks/*

    次のコードで設定された初期化子を確認できます。

    require 'rails/all'
    Rails::Railtie.initializers.map(&:name) #=> []  
    Rails::Engine.initializers.map(&:name)  #=> [:set_load_path, :set_autoload_paths, :add_routing_paths, :add_locales, :add_view_paths, :load_environment_config, :append_assets_path, :prepend_helpers_path, :load_config_initializers, :engines_blank_point]
    
  • などの便利な方法isolate_namespace

于 2015-11-24T17:30:57.830 に答える