为什么我不能在Mongoid中对一个类有多个1:N和1:1的单向引用?

时间:2012-04-02 18:05:02

标签: ruby-on-rails ruby mongoid

我正在尝试设置多个引用类的类,它们只需要一种方式。

我有这些课程:

class Widget
  include Mongoid::Document

  ...

class Template
  include Mongoid::Document 

  has_and_belongs_to_many :widgets, inverse_of: nil
  ...


class EntryText
  include Mongoid::Document

  has_one :widget, inverse_of: nil
  ...

当我尝试类似的事情时:

 EntryText.new.widget = Widget.first

我收到此错误:

undefined method `=' for #<Widget:

我可以更改Entry Text以获得对Widget的引用:

has_and_belongs_to_many :widgets, inverse_of: nil

但由于它只有一个小部件,这是一种丑陋的解决方法。

1 个答案:

答案 0 :(得分:1)

您应该使用has_one :widget而不是belogs_to :widget, inverse_of: nil。 Mongoid(也是活动记录)在belongs_to侧存储id。因此,如果关系只需要在一侧持久化,那么它必须是belongs_to,否则我们无法从数据库中找回我们试图存储的关联。