2016-10-10 76 views
0

我有一个名为email_messages的表。我有列from,to,cc,bcc。目前,我将它们存储为文本字段,其中包含序列化的电子邮件地址数组。但我想将地址提取到自己的表中,这样我就可以重复使用地址,并且可以更轻松地使用键入方式来搜索地址。与记录的各个字段的多对多关系

显然,我需要多对多。但是,如果我这样做:

class EmailMessage 
    has_many :email_message_addresses 
    has_many :addresses, through: :email_message_addresses 
end 

class Address 
    has_many :email_message_addresses 
    has_many :email_messages, through: :email_message_addresses 
end 

我怎么能地址为每个fromtoccbcc场单个记录相关联?该from字段可以包含3个地址中,to字段可以包含5个地址等

回答

0

添加到email_message_addresses称为role,的属性,它可以承担值fromto

你可能会想添加一些方法,使您可以为每个EmailMessage做以下语法

@message = EmailMessage.find(...) 
@message.to_addresses # -> array of addresses in the "to" field 
@message.cc_addresses # -> array of addresses in the "cc" field 
# etc. 
+0

因此,将有四个EmailMessageAddress(从,到,CC,BCC),并为每个EmailMessageAddress,会有一个或多个地址? – Donato

+0

否。如果给定的消息在'from field'中有1个人,'to'字段中有2个人,'cc'中有3个,并且bcc中有'4',那么EmailMessageAddress表中将有10个条目(1 + 2 + 3 + 4)。 –

相关问题