loading two similar Rails Engine in single app

Hi all,

I trying to load two similar Rails Engine in single app ..

In my app Engine A like a core and engine B like a specific to some other purpose. In this two engines have many models,some models have shared in both engines.

In this i faced one problem if i shared the model means all the method is not loaded correctly.. .Ex,i have article model in both engines Engine A have 5 methods and i have over-ride the model in Engine B it has 2 function. what i thought is Engine B article model have Engine A and Engine B methods ,but what it's happen article model have only Engine B model methods only.

if i load manually means it working correctly. I have load one engine in one single app it is working correctly.. Please tell me how to load 2 similar engines in one single app...

in Gem file i have loaded the engine ->>>

gem 'core-engine', :path => 'Engines/core-engine' gem 'microsite', :path => 'Engines/microsite'



This is a question for rubyonrails-talk, as this mailing list is reserved for Core members discussing Rails development. So please post your questions there,see this presentation for better overview of Rails Engine.



Short answer is: namespace your models, for example you should have Blog::Post instead of Post.

And as already been said, this is not a question for rubyonrails-core.

Thanks for quick reply...

I have not used isolate_namespace concept...

controller also not loaded like models...

cau u plz tell me any other solution

You should almost always namespace your models in engine, no matter if you use isolate_namespace or not. Please read the engines guide to see what isolated_namespace changes: http://edgeguides.rubyonrails.org/engines.html

My model like this only....... class Site < ActiveRecord::Base

  def view_path     "#{SITES_ROOT}/#{self.template.name}/views"   end

  def jeno     self.short_name   end

end what can i do for this ......???


I’ll answer you directly, since this is not something to be discussed in rails core.

When writing engines, it is a good practice to namespace them http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#label-Isolated+Engine

And so you would have a CoreEngine::Article and a Microsite::Article and there would be no conflicts or functionality sharing.

But for what I understood of your email, you want microsite to inherit from core_engine. What I would do is still namespace them and then make the microsite inherit from it, like so:


class CoreEngine::Article < ActiveRecord::Base



class Microsite::Article < CoreEngine::Article


If you really need to call it Article in your main app, you can do this:


class ::Article < ActiveRecord::Base



class Article < ::Article


Bare in mind though that in this solution microsite’s article is inheriting from the application article, which means you will have to make sure core_engine loads to the app before microsite.

Hope it helps. :wink: