Nested Rails Views

I’m at the point where I have a lot of view files for each controller in
my app. I’d like to be able to add another level or two of directories
in my view folders just for organizational purposes. What’s the best
way to do this?

i.e. app/views/controller/sub_dir/view.html.erb

Raymond O’Connor wrote:

I’m at the point where I have a lot of view files for each controller in
my app.

Why do you have so many? It’s rare to have more than about 5 views per
controller.

I’d like to be able to add another level or two of directories
in my view folders just for organizational purposes. What’s the best
way to do this?

i.e. app/views/controller/sub_dir/view.html.erb

Answer the first question, and perhaps an idea will present itself.

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Marnen Laibow-Koser wrote:

Raymond O’Connor wrote:

I’m at the point where I have a lot of view files for each controller in
my app.

Why do you have so many? It’s rare to have more than about 5 views per
controller.

I’d like to be able to add another level or two of directories
in my view folders just for organizational purposes. What’s the best
way to do this?

i.e. app/views/controller/sub_dir/view.html.erb

Answer the first question, and perhaps an idea will present itself.

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

I could split the actions into multiple controllers, but then I’d want
some sort of organization to group controllers then… Once a project
reaches a certain size, actions tend to organize hierarchically at least
my project has. Just wondering if there’s an easy way to organize all
those files hierarchically since their logical group is hierarchical

Raymond O’Connor wrote:

Marnen Laibow-Koser wrote:

Raymond O’Connor wrote:

I’m at the point where I have a lot of view files for each controller in
my app.

Why do you have so many? It’s rare to have more than about 5 views per
controller.

I’d like to be able to add another level or two of directories
in my view folders just for organizational purposes. What’s the best
way to do this?

i.e. app/views/controller/sub_dir/view.html.erb

Answer the first question, and perhaps an idea will present itself.

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

I could split the actions into multiple controllers,

That’s a more common plan. Please give some more detail about how your
app is structured, and perhaps we can give more specific help.

but then I’d want
some sort of organization to group controllers then…

Rails provides for namespacing controllers.

Once a project
reaches a certain size, actions tend to organize hierarchically at least
my project has.

Yes. Usually controllers are the first level in the hierarchy.

Just wondering if there’s an easy way to organize all
those files hierarchically since their logical group is hierarchical

Again: what’s your app like? Why do you have so many views per
controller? Please give specific answers if you want better help.

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Thanks for the help so far. Here’s a more concrete example of what I’m
talking about. I have an app used for warehousing and fulfillment.
Some of the controller domains are:

Receiving
Locating Items
Shipping Out Items
Finance Related Stuff
Shipment Tracking

Within just the Receiving controller there are dozens of view files
because it’s become larger and larger over the years. You need to be
able to receive a shipment, then receiving individual items in a
shipment, track exception cases, edit previous check in data, etc. I’d
really like a way to organize some of those files such that I have
/receiving/shipment_check_in/…, /receiving/exceptions/…,
/receiving/item_check_in/…

All my controllers are getting to this size or are already there. I was
just wondering if there was an easy way to refractor and organize
projects of these size.

Raymond O’Connor wrote:

Thanks for the help so far. Here’s a more concrete example of what I’m
talking about. I have an app used for warehousing and fulfillment.
Some of the controller domains are:

Receiving
Locating Items
Shipping Out Items
Finance Related Stuff
Shipment Tracking

Within just the Receiving controller there are dozens of view files
because it’s become larger and larger over the years. You need to be
able to receive a shipment, then receiving individual items in a
shipment, track exception cases, edit previous check in data, etc. I’d
really like a way to organize some of those files such that I have
/receiving/shipment_check_in/…, /receiving/exceptions/…,
/receiving/item_check_in/…

All my controllers are getting to this size or are already there. I was
just wondering if there was an easy way to refractor and organize
projects of these size.

Your controllers are far too big and general. Receiving should not be
one controller. You’d probably want a ShipmentsController, an
ExceptionCasesController, and so on.

You could probably benefit from redesigning your controllers to follow a
RESTful pattern. You needn’t adhere slavishly to it, but using REST as
a guideline will give you a better idea of what controllers are normally
expected to do.

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Since you don’t have many details posted, I’ll suggest a generic
solution that worked for me:

Use partials. You can populate them based on sub-categories within
your actions or groups or whatever your ‘parent’ classification is.
You can implement whatever heirarchy you like - each level would have
a partial, that would then render the child levels as needed. Render
using conditionals or a loop, and you can turn three partials into a
three-level-deep, nested heirarchy.

Hope that helps. Post details for better assistance.

SR