使用Mongo更新子after_save上的父模型

时间:2011-06-23 06:29:17

标签: ruby-on-rails ruby mongodb model mongoid

用户有很多帖子,帖子属于用户。两者都有一个位置。我想存储每个帖子的位置,并使用最新的帖子位置更新用户位置。 After_save是要走的路吗?我对Mongo DB非常缺乏经验。

发布模型

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)

2 个答案:

答案 0 :(得分:1)

应该这样做,你尝试过什么吗?顺便说一下,这实际上是一个Mongoid特定的问题,与MongoDB本身并不相关。

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

答案 1 :(得分:0)

这应该有效:

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

但是我想我已经注意到一个错误,如果你的父模型(User)有一些before_save函数,self._parent.save没有效果......我已经遇到过两次这样的情况了,找不到任何解释它

亚历