2010-04-22 119 views
0

警告:我可能有錯誤的'問題陳述',但這裏有:如何通過關聯has_many通過關聯在rails中執行has_many?

活動有許多聯繫人。

一個活動有很多電子郵件。

因此,聯繫人通過廣告系列有很多電子郵件。

而且電子郵件可以通過廣告系列擁有多個聯繫人。

每個聯繫人 - 電子郵件對具有自己獨特的狀態(狀態1,狀態2等)。

每個狀態(對於聯繫人 - 電子郵件對)都有自己的用戶。

我不知道如何建模狀態或用戶。目前眼前的挑戰是狀態。

(參見下圖)下面

alt text http://img88.imageshack.us/img88/7086/statusassociations.png

回答

0

溶液假設狀態可以表示爲一個字符串。

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 
+0

so ContactEmail是一種代表聯繫人 - 電子郵件對的新模型嗎? – Angela 2010-04-23 00:46:54

+0

是的,ContactEmail是一對。 – 2010-04-23 02:22:26

+0

所以ContactEmail也需要有自己的屬性,與Email完全一樣(但是使用郵件文本?)或者它只是一個佔位符,並且電子郵件被髮送並且內容從不存儲? – Angela 2010-04-23 03:29:51