View inheritance and rendering in engines

Hi

I’m creating a mountable admin engine (like Active Admin but not as
advanced) using Inherited Resources. Let’s call it AdminFoo.
In my main app I mount it with mount AdminFoo::Engine, at: ‘/admin’ in
my
routes file.

Let’s say I have the following structure in my engine:

AdminFoo
app

  • views
    • admin_foo
      • resource
        • index.html.erb
      • shared
        • _nav_bar.html.erb

If I want to render _nav_bar in my index.html.erb file I need to
reference
it from the view root, like this: *render ‘admin_foo/shared/nav_bar’ *
Now I want to override the nav_bar partial from my main app like this:

MainApp
app

  • views
    • admin
      • shared
        • _nav_bar.html.erb

However, this doesn’t work since it looks for the file in *
‘admin_foo/shared/nav_bar’*
I don’t want to create an admin_foo folder in my main app since I
already
have the admin folder which the engine mounted under. This works for
controllers, for instance I have this structure for my custom admin
controllers and its views:
*
*
MainApp
app

  • controllers
    • admin
      • Admin::BarController < AdminFoo::ResourceController
  • views
    • admin
      • bar
        • index.html.erb

It is weird to have both admin AND admin_foo folders in my main app.