best practices for sub-modules and sub-views?

In my app, I need to perform transactions with external web sites. (Assume this is a system for placing online orders with restaurants -- it isn't, but the true purpose will be revealed eventually). Each restaurant's online system is slightly different, requiring slightly different information from the user.

What I want is a landing page where all the restaurants are listed in a pull-down list. Upon selecting a specific restaurant, the user gets a view (more likely a partial) for that specific restaurant where they can enter information.

To pull this off, I think I want a generic Model, View and Controller for a Restaurant, and then sub-classes for specific restaurants.

I'd prefer not to hard-code the restaurant classes into a file -- it would be better if simply adding the restaurant class files to a directory caused it to get discovered by the app. And since there can be an arbitrary number of restaurants, I really don't want them in the top-level models / controllers / views directories.

My question is really about how to structure the classes and directories. What's the idiom for doing this kind of thing in Rails? Are there good examples worth emulating?

Fearless Fool wrote in post #971084:

In my app, I need to perform transactions with external web sites. (Assume this is a system for placing online orders with restaurants -- it isn't, but the true purpose will be revealed eventually).

It's really hard to provide accurate advice with inaccurate information.

Each restaurant's online system is slightly different, requiring slightly different information from the user.

What I want is a landing page where all the restaurants are listed in a pull-down list. Upon selecting a specific restaurant, the user gets a view (more likely a partial) for that specific restaurant where they can enter information.

That's easy enough.

To pull this off, I think I want a generic Model, View and Controller for a Restaurant, and then sub-classes for specific restaurants.

No, you probably don't. What you probably want is a fairly generic Restaurant object with some sort of configuration property.

I'd prefer not to hard-code the restaurant classes into a file -- it would be better if simply adding the restaurant class files to a directory caused it to get discovered by the app. And since there can be an arbitrary number of restaurants, I really don't want them in the top-level models / controllers / views directories.

My question is really about how to structure the classes and directories. What's the idiom for doing this kind of thing in Rails? Are there good examples worth emulating?

You can use namespaced models, views, and controllers. But your architectural approach is almost certainly wrong.

Best,

Marnen Laibow-Koser wrote in post #971089: [snip]

That's easy enough.

[snip]

No, you probably don't [want a generic Model, View and Controller for a Restaurant, and then sub-classes for specific restaurants]. What you probably want is a fairly generic Restaurant object with some sort of configuration property.

[snip]

You can use namespaced models, views, and controllers. But your architectural approach is almost certainly wrong.

Marnen:

Methinks you keep your copious wisdom too under wraps. You answer makes it clear that you think my approach is wrong, but doesn't really explain Marnen's One True Way! :slight_smile:

A search for

  site:http://guides.rubyonrails.org/ namespace

shows me about namespaced routes, namespaced forms, but nothing about how to organize files and classes to have namespaced models, views and controllers.

Perhaps my question is too general, so I can re-frame it: is there an example (on github or in Rails itself) that shows a good way to do this kind of thing?

TIA.

- ff

Fearless Fool wrote in post #971153:

Marnen Laibow-Koser wrote in post #971089: [snip]

That's easy enough.

[snip]

No, you probably don't [want a generic Model, View and Controller for a Restaurant, and then sub-classes for specific restaurants]. What you probably want is a fairly generic Restaurant object with some sort of configuration property.

[snip]

You can use namespaced models, views, and controllers. But your architectural approach is almost certainly wrong.

Marnen:

Methinks you keep your copious wisdom too under wraps. You answer makes it clear that you think my approach is wrong, but doesn't really explain Marnen's One True Way! :slight_smile:

What part was unclear? I'll be happy to elaborate.

A search for

  site:http://guides.rubyonrails.org/ namespace

shows me about namespaced routes, namespaced forms, but nothing about how to organize files and classes to have namespaced models, views and controllers.

Use directories corresponding to the namespaces; that way the autoloader knows where to find the files.

Perhaps my question is too general, so I can re-frame it: is there an example (on github or in Rails itself) that shows a good way to do this kind of thing?

TIA.

There should be lots of explanations of dealing with namespaced classes in Rails.

- ff

Best,

Marnen Laibow-Koser wrote in post #971154:

What part was unclear? I'll be happy to elaborate. [snip] There should be lots of explanations of dealing with namespaced classes in Rails.

I agree that there SHOULD be! :slight_smile: But I haven't found one yet. If you give me a pointer to one good explanation about how to structure namespaced classes, I'll be happily preoccupied for a day or two.

Thanks in advance.

- ff