Warning: I may have the wrong ‘problem statement’ but here it goes:
A Campaign has many Contacts.
A Campaign has many Emails.
Therefore, a Contact has many Emails through a Campaign.
And an Email can have many Contacts through a Campaign.
Each Contact-Email pair has its own unique Status (status1, status2, etc).
Each Status (for a Contact-Email pair) will have its own User.
I do not know how to model Status, or User. Currently the immediate challenge is Status.
(see diagram below)

Solution below is assuming that status can be represented as a string.
Adding emails to contact:
OR
OR create multiple:
Edit 2
Nested resources for ContactEmail.
URL for ContactEmail
The URL does not have the email id. You can pass the email_id as a query parameter, i.e.
In your ContactEmailsController:
In your view set
email_idas hidden field.In the
createmethod perform the save.