嵌入文档不能包含其他模型 ID?未定义的方法`bson_type'

Embedded document cannot hold other model IDs ? undefined method `bson_type'

要么是我还没有理解嵌入文档的局限性,要么就是一个 bug :

我希望我的通知具有对 "sender" 用户模型的引用。但是,我不关心能否找到给定用户发送的通知。我认为此设置可行:

编辑:问题出在我的习惯 setter

class User
  embeds_many :notifications

class Notification
  embedded_in :user
  belongs_to :sender, class_name: "User", inverse_of: nil

  def sender=(someone)
    self[:sender] = (someone.is_a?(User) ? someone : someone.user)
  end

现在在控制台中:

user_a.notifications.create!(sender: user_b)

抛出

NoMethodError: undefined method `bson_type' for #<User:0x83dd590>

这可能会有所帮助,可能只是一个观察结果。

sender= 正在覆盖 Rails 方法,所以你可能会从中得到一些奇怪的东西。我会这样做:

def sender=(someone)
  someone = someone.is_a?(User) ? someone : someone.user
  super(someone)
end

希望对您有所帮助!

我现在想自杀...

def sender=(someone)
  self[:sender] = (someone.is_a?(User) ? someone : someone.user).id
end