2

私はゆっくりとこの問題に夢中になっています。Mongoid (および Ruby on Rails) の旅を始めたばかりなので、それは些細なことであり、何かを誤解していると確信しています。

私のモデルは次のとおりです。

class Drawing
include Mongoid::Document

    field :image_uid
    image_accessor :image
    field :date_created, type: Time, default: Time.now

    recursively_embeds_many

    embedded_in :user
    embedded_in :painting_template, class_name: 'Painting', inverse_of: :template_drawing
    embedded_in :painting_result, class_name: 'Painting', inverse_of: :result_drawing

User モデル "embeds_many" Drawings、Painting モデル "embeds_one" template_drawing および result_drawing。

ここ数時間、私がやろうとしてきたことは、新しい Drawing を作成し、それをユーザーに添付して、その親が存在する場合はその親を定義することです。私はコンソールでたくさん遊んでいますが、基本的に私がしていたことはこれに似ていました:

User.first.drawings.last.parent_drawing = User.first.drawings.first.dup

コンソールは満足しているようで、User.first.drawings.first の内容を返しますが、User.first.drawings.last.parent_drawing は nil を返します...

それらを変数に割り当てたり、変数を割り当てたりしようとしましたが、何も変わりません。新しい図面を作成して、一方を他方の親として配置しようとしましたが、失敗しました。

親を割り当てることは不可能だという結論に達しました。そのため、逆の方法で子を追加しようとしましたが、それでも親または子を持つオブジェクトを取得できません。

失敗するコードをいくつか次に示します (私の Rails コードから抽出して短縮したものです)。

drawing = Drawing.new({:user => @user})
drawing.parent_drawing = @user.drawings.find(parent_id).dup
drawing.save

おかしなことに、描画自体は保存され、user.drawings にリストされますが、親はありません。

私は何を間違っていますか?

4

1 に答える 1

2

コメントのアドバイスを受けて、モデルをゼロから考え直そうとしました。ポリモーフィックな関係に関するドキュメントを読み直し、描画をポリモーフィックにしました。それでも、Drawing は別の Drawing 内に埋め込まれ、再帰的に埋め込まれ、再びどこにも導かれないようにする必要があります。

循環関係に関する Mongoid のドキュメント/コード (http://rdoc.info/github/mongoid/mongoid/Mongoid/Relations/Cyclic/ClassMethods) を使用して、「recursively_embeds_many」が行っている埋め込みが間違っていたためだと思いました。 Drawing がポリモーフィックであるという事実を含めないでください。

embedded_in ステートメントがポリモーフィックであるという事実によって作成されていることを考えると、

embeds_one :base_drawing, class_name: "Drawing", as: :drawable, cyclic: true

求めていた効果があったようです。「recursively_embeds_many」のように「子」は含まれませんが、私の場合は必要ありません。

これが、再帰的に埋め込まれたポリモーフィックな関係に問題を抱えている次の人に役立つことを願っています。

于 2012-08-14T12:45:38.297 に答える