溶液假設狀態可以表示爲一個字符串。
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
添加電子郵件聯繫:
contact_email = @contact.contact_emails.build(:user => current_user,
:email => @email, :status => "status1")
contact_email.save
OR
@contact.contact_emails.create(:user => current_user,
:email => @email, :status => "status1")
或創建多個:
@contact.contact_emails.create(
[
{
:user => current_user,
:email => @email,
:status => "status1"
},
{
:user => current_user,
:email => @email2,
:status => "status2"
}
]
)
編輯2 ContactEmail的嵌套資源。
map.resources :contacts, has_many :contact_emails
網址爲ContactEmail
/contacts/1/contact_emails/new #new
/contacts/1/contact_emails/2/edit #edit
的URL沒有電子郵件ID。您可以通過EMAIL_ID作爲查詢參數,即
new_contact_contact_email_path(@contact, :email_id => @email)
在你ContactEmailsController:
def new
@contact = Contact.find(params[:contact_id])
@email = Email.find(params[:email_id])
@contact_email = @contact.contact_emails.build(:email => @email)
end
在您的視圖設置email_id
爲隱藏字段。
在create
方法中執行保存。
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
so ContactEmail是一種代表聯繫人 - 電子郵件對的新模型嗎? – Angela 2010-04-23 00:46:54
是的,ContactEmail是一對。 – 2010-04-23 02:22:26
所以ContactEmail也需要有自己的屬性,與Email完全一樣(但是使用郵件文本?)或者它只是一個佔位符,並且電子郵件被髮送並且內容從不存儲? – Angela 2010-04-23 03:29:51