Efficient way to manage associations between existing objects

Posted this to Stack Overflow yesterday and received no replies, so i
figured I would try here.

I am working on a Rails app that has lots of data in many different
tables
related to each other via :has_many through associations. The problem
here
is that these associations are not static, like your typical Post -
User,
Assembly - Part, Book - Author associations that never change.
Associations
in my app will change all the time. The objective is to find the most
efficient way to manage associations between *existing *objects in the
database.

As I’ve recently discovered, Rails does not automatically create
associations between existing objects and nested forms are only usable
when
associations already exist.

For example, I have a form that loads a Contact from contacts table.
Same
form has a Commandmulti-select populated from commands table. I want to
associate multiple commands with this Contact, so i select few commands
in
my multi-select, which adds them to an array of hashes called
notification_commands. Since Rails does not do automatic association, I
have to do something like this:

contact = Contact.find_by_id params[:id]
commands = params[:contact][:notification_commands].collect { |c| c[:id]
}
contact.commands << Command.find(commands)

This works OK… unless, lets say, I want to associate another command
with
this contact. In that case existing association records end up getting
duplicated and new one added. Ok, I can do unique validations in my
model… or I can just use brute force, destroy all associations and
re-establish them again.

contact = Contact.find_by_id params[:id]
commands = params[:contact][:notification_commands].collect { |c| c[:id]
}
contact.commands.destroy_all
contact.commands << Command.find(commands)

Ok. Thats not really all that elegant…

Model validations sound like a good option here and I will put them in
as
an extra safety measure, but why make the application do extra work?
Duplicate records should be discarded before they even get to the model.

Another possibility (that I know of) is to compare arrays in my
controller
and see what the difference is between data in the db and what’s being
posted from the form.

Now, my views are AngularJS, and I am yet to figure out how to make
Angular
use Rails _destroy method. If that’s not possible, I would have to do
another array comparison, now in reverse, to see what associations need
to
be removed. Again, not very elegant.

So, while the brute force method of destroying all associations and
re-establishing them all again works and requires the least amount of
code,
I don’t feel that it is good practice.

Any suggestions on what is the more efficient and cleanest way to manage
associations between multiple existing objects?