models (parent models)
Manufacuturer has_one Logo
Product has_one product_picture
Classified has_many classified_photos
User has_one avatar
more models (STI)
Logo
Product_Picture
Classified_photos
Avatar
1- Do I create one Controller called ImageUploadController and put all
the custom methods (each type of picture has its own characteristics),
where I will also need to have custom routes such as:
add_prodcut_logo, delete_product_logo, etc..
2- Add custom methods, and custom named routes in the parent models
3- Or, just create a separate controller for each such as
LogoController, ProductPhotoController, ClassifiedPhotoController and
use nested routes, each of the pictures will be operated on within
their parent model.
> 1- Do I create one Controller called ImageUploadController and put all
the custom methods (each type of picture has its own characteristics),
where I will also need to have custom routes such as:
add_prodcut_logo, delete_product_logo, etc..
2- Add custom methods, and custom named routes in the parent models
The non-default route system exists so you don't need to name URI paths after controllers. This lets you put the logic wherever you like, independent from the controllers.
3- Or, just create a separate controller for each such as
LogoController, ProductPhotoController, ClassifiedPhotoController and
use nested routes, each of the pictures will be operated on within
their parent model.
Which solution leads to the least code, and with the most similar code grouped together? I suspect that a controller in charge of images would have a few private methods - maybe a few helper methods - for the heavy lifting.
Also, remember to write unit tests before you write the tested code. This (generally) forces you to test all your code, and it allows you to move code around. You should never be stuck with one pattern. You should be free to start with something that sucks but at least works, so you can improve that over time.
That will create the logo and assign it to product via the
association.
For my app, the logo uploads are all within the context of something
else. I.e. there isn't ever a form _just_ for logos. They are always
part of a Product or User or whatever. This also then puts the logic
of what type of logo into the realm of the "thing" that cares... i.e.
a Product needs ProductLogo so it's create method uses
"build_product_logo".