2012-04-17 9 views
3

埋め込みドキュメントを追加しようとしています。私はこの構文が間違っていることを知っていますが、私が達成しようとしていることを実証しています。さまざまなフィールドに同じ種類の埋め込みドキュメントがあります

class Email 
    include Mongoid::Document 

    embeds_many :recipients, as: :to 
    embeds_many :recipients, as: :cc 
    embeds_many :recipients, as: :bcc 

    field :from, type: String 
    field :subject, type: String 
    field :body, type: String 
end 

class Recipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 

以下のコードサンプルは動作しますが、コードの重複を避けるようにしています。

class Email 
    include Mongoid::Document 

    embeds_many :to_recipients 
    embeds_many :cc_recipients 
    embeds_many :bcc_recipients 

    field :from, type: String 
    field :subject, type: String 
    field :body, type: String 
end 

class ToRecipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 

class CcRecipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 

class BccRecipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 

誰もがこれを処理するきれいな方法を知っていますか?

答えて

4

が最良の答えであるかもしれ仮定!

class Email 
    include Mongoid::Document 

    embeds_many :to_recipients, :class_name => "Recipient" 
    embeds_many :cc_recipients, :class_name => "Recipient" 
    embeds_many :bcc_recipients, :class_name => "Recipient"  
    embeds_one :from, :class_name => "Recipient" 

    field :subject, type: String 
    field :body_text, type: String 
    field :body_html, type: String 
end 

class Recipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 
0

私はこれがここでの最善の解決策

class Email 
    include Mongoid::Document 

    embeds_many :to_recipients 
    embeds_many :cc_recipients 
    embeds_many :bcc_recipients 

    field :from, type: String 
    field :subject, type: String 
    field :body_text, type: String 
    field :body_html, type: String 
end 

class Recipient 
    include Mongoid::Document 
    field :email_address, type: String 
    field :name, type: String 
    validates :email_address, :presence => true 
    embedded_in :emails 
end 


class ToRecipient < Recipient; end 
class CcRecipient < Recipient; end 
class BccRecipient < Recipient; end 
関連する問題