0

エンジンの名前空間と少し混乱しています。使用されるRailsエンジンでisolate_namespaceは、

module Blog
  class Engine < Rails::Engine
    isolate_namespace Blorgh
  end
end

名前空間を持つオブジェクトを参照する必要があるのはいつですかBlog(例:Blog::Postvs just Post)?

たとえば、Postエンジンのリソースのコントローラー内で、実行しても大丈夫Post.findですか?どうしても使う必要があるときはBlog::Post

モデルの関連付けでも、Postと仮定しhas_many :commentsます。どういうわけか、私はそれを次のように定義することを期待していました:

class Post < ActiveRecord::Base
  :has_many "blog/comments"
end

すべてが名前空間化されているため(モデル、テーブル名など)、正しく機能しているように見えますhas_many :comments。名前空間が関連付けキーで使用されないのはなぜですか。また、Commentリソースがホストアプリケーションに存在する場合、railsはどのようにしてComment私が参照しているものを認識しますか?

4

1 に答える 1

2

モジュール内にいるときは、モジュール名を指定せずに、モジュールの他のメンバーを参照できます。例:

module Foo

  class Bar
    def initialize
      @baz = Baz.new # same as Foo::Baz.new
    end
  end
  class Baz

  end
end

Baz現在のモジュールに存在しない場合は、カスケードダウンして定義を見つけ、最終的に呼び出しconst_missingて(Railsでクラスの自動ロードが構築されます)、何も見つからない場合はエラーをスローします。

残りの質問はここで回答されます。

于 2012-08-30T12:23:51.223 に答える