Solution ci-dessous suppose que l'état peut être représenté comme une chaîne.
class Campaign < ActiveRecord::Base
has_many :contacts
end
class Contact < ActiveRecord::Base
belongs_to :campaign
has_many :contact_emails
has_many :emails, :through => :contact_emails
end
class ContactEmail < ActiveRecord::Base
belongs_to :contact
belongs_to :email
belongs_to :user
# add a column called status
end
class Email < ActiveRecord::Base
has_many :contact_emails
belongs_to :contacts, :through => :contact_emails
end
Ajout d'e-mails à contacter:
contact_email = @contact.contact_emails.build(:user => current_user,
:email => @email, :status => "status1")
contact_email.save
OU
@contact.contact_emails.create(:user => current_user,
:email => @email, :status => "status1")
OU créer plusieurs:
@contact.contact_emails.create(
[
{
:user => current_user,
:email => @email,
:status => "status1"
},
{
:user => current_user,
:email => @email2,
:status => "status2"
}
]
)
Edit 2 Ressources imbriquées pour ContactEmail.
map.resources :contacts, has_many :contact_emails
URL pour ContactEmail
/contacts/1/contact_emails/new #new
/contacts/1/contact_emails/2/edit #edit
L'URL ne pas l'id e-mail. Vous pouvez passer le email_id comme paramètre de requête, à savoir
new_contact_contact_email_path(@contact, :email_id => @email)
Dans votre ContactEmailsController:
def new
@contact = Contact.find(params[:contact_id])
@email = Email.find(params[:email_id])
@contact_email = @contact.contact_emails.build(:email => @email)
end
Selon vous définissez email_id
champ comme caché.
Dans la méthode create
, effectuez l'enregistrement.
def create
@contact = Contact.find(params[:contact_id])
@contact_email = @contact.contact_emails.build(params[:contact_email])
if @contact_email.save
# success
else
# error
end
end
alors ContactEmail est un nouveau modèle qui représente une paire contact-email? – Angela
Oui, ContactEmail est la paire. –
Est-ce que ContactEmail aurait aussi besoin d'avoir ses propres attributs, exactement comme le fait le courrier électronique (mais avec du texte mailmergé?) Ou est-ce juste un espace réservé et l'email est envoyé et le contenu jamais stocké? – Angela