RoR - 哈希中的Mongoid外键

时间:2014-12-07 16:37:03

标签: ruby-on-rails ruby mongoid

让我们说我有两个模型,在这个例子中是一个网站和一个主题,我想让一个网站属于一个主题,但是在哈希中用一个键引用它。

class Site
  include Mongoid::Document

  field :preferences, type: Hash

  belongs_to :theme, foreign_key: :"preferences.theme_id"

end

正如您所看到的,theme_id存储在名为" preferences"的哈希中,问题是使用此代码,mongoid无法找到正确的theme_id。 我应该如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

如果您希望将首选项保持在一起且结构合理,则可以使用嵌入式文档而不是简单的哈希:

class Site
  include Mongoid::Document
  embeds_one :preferences, :class_name => 'Preferences'
end
class Preferences
  include Mongoid::Document
  embedded_in :site
  belongs_to :theme
end

你的preferences仍然是数据库中的哈希,但是你会得到足够的Mongoid包装来使关联工作。如果你这样做,那么你会说:

t = site.preferences.theme

如果您愿意,可以将来自theme个实例的Site来电委托给其嵌入式preferences