Processor
モジュール内の次のコードで、elements
アソシエーションのオーナーにアクセスする予定です。まずアップ、Chapter.process
が呼び出されます。アソシエーションオーナーオブジェクトへのアクセス
アプリ/モデル/ chapter.rb
class Chapter
include Mongoid::Document
field :position, :type => Integer
field :title, :type => String
field :identifier, :type => String
embedded_in :book
embeds_many :elements
def self.process!(git, file)
chapter = new
# Parsing of XML goes here, generating parsed_doc
elements = parsed_doc.css("div.chapter > *")
elements.each { |element| chapter.elements.process!(element) }
end
これは、実際にこのようなElement
クラスに含まれているProcessor
内部コードにオフに渡します
アプリ/モデル/ element.rb
class Element
include Mongoid::Document
extend Processor
field :tag, :type => String
field :identifier, :type => String
field :title, :type => String
embedded_in :chapter
end
クラスは次のように定義されている
:
module Processor
def process!(markup)
[ASSOCIATION OWNER GOES HERE].elements.send("process_#{markup.name}!", markup)
end
私はこれを必要とする理由は、私は単にそれ自体でsend
を呼び出すことを試みてきたが、Monogidは主張しているので、その:
のためのコレクションへのアクセス要素は埋め込みドキュメントであるため許可されていません。ルートドキュメントからコレクションにアクセスしてください。
これを行う唯一の方法は、この関連付けの親オブジェクトにアクセスすることだと思われます。ドキュメントのインスタンスに_parent
メソッドがあるはずですが、この場合、このメソッドはコレクションで呼び出されていますが、インスタンスではありません。
このprocess!
メソッド内から関連オブジェクトを参照するにはどうすればよいですか?
わかっているのか分かりませんが、 'chapter'から' chapter.elements.process!(element、chapter) 'を直接渡すとどうなりますか? – fl00r
@ fl00r:Elementの 'create!'メソッドは何のために作成されているのか何とか知っていなければなりません。 –