Use “build”, Not “new”
When working with multiple models and forms in Rails, your associations need to use “build” instead of “new”. I never knew there was a distinction between the two. Apparently, I was wrong :\
For example, this will not work when trying to validate the associations:
@account = Account.new(params[:account])
@user = @account.users.new(params[:user])
The “new” method doesn’t actually build the association. The @account will be saved, but the @user won’t be if it fails validation.
Using the “build” method will automatically take care of the transactional part for us so the @account object won’t be saved until both models are valid:
@account = Account.new(params[:account])
@user = @account.users.build(params[:user])
It’s handy in the controller too. Instead of calling both @account.save and @user.save, you simply call @account.save and it saves the @user association.