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

2 に答える 2

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
于 2012-04-18T18:23:13.133 に答える
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
于 2012-04-17T15:00:02.270 に答える