2011-06-23 4 views
1

ユーザーには複数の投稿があり、投稿はユーザーに属します。どちらにも場所があります。私は各投稿の場所を保存し、ユーザーの場所を最新の投稿場所に更新したいと思います。 after_saveは行く方法ですか?私はMongo DBにはとても慣れていません。Mongoを使用して、after_saveという子の親モデルを更新します。

ポストモデル

class Post 
    include Mongoid::Document 
    belongs_to :user 

    after_save :update_user_location 
    field :location, :type => String 

    def update_user_location 
    #update user's location 
    end 
end 

ユーザーモデル

class User 
    include Mongoid::Document 

    has_many :posts 
    field :location, :type => String 
end 

(ちょうど最も最近のポストの場所を取得するには言わないでください、私は理由別々に保管してくださいする必要があります... thx)

答えて

1

これは、あなたが何かを試してみる必要がありますか? Btwこれは本当にMongoDB特有の問題です。実際MongoDB自身には関係ありません。

def update_user_location 
    self.user.location = self.location 
    self.user.save 
end 
0

これは動作するはずです:

def update_user_location 
    self._parent.location = self.location 
    self._parent.save 
end 

は、しかし、私はあなたの親モデル(ユーザー)は、いくつかのbefore_save機能を持っている場合、私は、バグに気づいたと思う、self._parent.saveが有効ではありません。..私はすでにこの症例に2回遭遇しており、それについて何の説明も見つけられませんでした。

アレックス

+0

アレックス、これは私の問題でした。私はbefore_saveをafter_validationに変更しようとしました。奇妙な、私はそれがちょうど私だと思った...私はまだmongoの新しいです – kinet

+0

ええ、まだいくつか風変わりな行動がありますが、これはmongodbよりむしろmongodbです私は信じています – Alex

関連する問題