My controller became fat trying to handle multiple models - need guidance please

Hello all.

I am experiencing something that has to be fairly common in the rails world, but I haven't found a clean solution yet.

I have a SignupController that handles multiple models in a single form. Those models are User, UserProfile, CreditCard, Subscription, and Order. When the form is filled out and posted, I want to do exactly what I would do if the form was only for a single model: (1) Build the object from params[:model] (2) Save the object, rendering errors to the form page if they exists (otherwise flash 'Success').

Why is this so tough when dealing with multiple models? Here is what I am doing (and this is how I know it's too complicated and there must be a better way): (1) Building each object (@user = User.new(params[:user]), @cc = CreditCard.new(params[:cc]), etc). (2) Parked at Loopia (3) I haven't gotten to manually building an 'errors' hash yet.

I would love to hear some feedback. Many thanks, Chris

Seems all of other the models are related to the User model, you should look into validates_associated:

http://rails.rubyonrails.com/classes/ActiveRecord/Validations/ClassMethods.html#M000948

Best regards

Peter De Berdt

Thanks for the feedback Peter.

From what I gather, validates_associated does not give specific error

feedback per model, so that is less than ideal. I have recently learned that error_messages_for can take in multiple models, so that is helpful. Still, I find dealing with multiple models in one form/ controller to be a bit cumbersome, especially compared to how smooth everything else in rails is :slight_smile:

Cheers, Chris