嵌入式文档无法容纳其他型号ID?未定义的方法`bson_type'

时间:2015-01-25 01:13:34

标签: ruby-on-rails reference mongoid

我仍然无法理解嵌入式文档的局限性,或者它是一个错误:

我希望我的通知能够引用"发件人"用户模型。但是,我并不关心能够找到给定用户发送的通知。我认为这个设置会起作用:

编辑:问题来自我的自定义设置器

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>

2 个答案:

答案 0 :(得分:1)

我现在要自杀...

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

答案 1 :(得分:0)

这可能有所帮助,可能仅仅是一种观察。

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

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

希望有所帮助!