6

現在、ROR 3.2 用のカスタム cms エンジンを開発中です。このプロセスでは、いくつかのクラス タイプが、Rails アプリケーションのファースト クラスの市民になりたいということから生まれました。

現在、次のタイプがあります。

  • 情報源
  • データ・タイプ
  • 意見

これらを保持するために、アプリフォルダーの下に複数のディレクトリを作成しました。

  • アプリ/データソース
  • アプリ/データタイプ
  • アプリ/ビュー

より多くの種類が続きますが、非常に多くのディレクトリでアプリ フォルダーが汚染されるのが少し心配です。したがって、cms で定義されたすべてのタイプを保持するサブディレクトリ/モジュールにそれらを移動したいと考えています。

すべてのクラスはMyCms名前空間内にある必要があり、ディレクトリ レイアウトは次のようになります。

  • アプリ/my_cms/data_source
  • アプリ/my_cms/data_type
  • アプリ/my_cms/ビュー

しかし、レールのデフォルトのオートロードではパスが次のようになると予想されるため、オートロードに問題があります。

  • アプリ/データソース/my_cms
  • アプリ/data_type/my_cms
  • アプリ/ビュー/my_cms

しかし、この方法では、すべてのオブジェクト タイプを 1 つのディレクトリにグループ化することはできませんでした。

私が望むのは、分離されたエンジンのグループ化を表示することにいくらか似ています。たとえば、Deviseでは、すべてのビューが views/devise サブディレクトリにグループ化されます。

多くのカスタム実装なしでこれをどのように達成できるか考えていますか?

4

1 に答える 1

10

config/application.rb 内の autoload パスに app/my_cms を追加する必要があります。

config.autoload_paths << "#{config.root}/app/my_cms"

クラスが次のような名前空間なしで定義されている場合:

class DataSource
  ...
end

app/my_cms/data_source.rb で次のように名前を付ける場合:

class MyCms::DataSource
  ...
end

app フォルダーをロード パスに追加できます。

config.autoload_paths << "#{config.root}/app"

または、手動で行うこともできますが、Rails 開発でこれらのクラスのリロードが失われます。

app/my_cms.rb 内 (および app の自動読み込みを使用):

module MyCms
  autoload :AnotherDataSource, 'my_cms/data_source/one_data_source'
  autoload :AnotherDataSource, 'my_cms/data_source/another_data_source'

  ...
end
于 2013-01-24T09:35:53.363 に答える