让我们说我有两个模型,在这个例子中是一个网站和一个主题,我想让一个网站属于一个主题,但是在哈希中用一个键引用它。
class Site
include Mongoid::Document
field :preferences, type: Hash
belongs_to :theme, foreign_key: :"preferences.theme_id"
end
正如您所看到的,theme_id存储在名为" preferences"的哈希中,问题是使用此代码,mongoid无法找到正确的theme_id。 我应该如何处理这种情况?
答案 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
。