class Contest < ActiveRecord::Base
has_one :claim_template
end
class ClaimTemplate
include Mongoid::Document
belongs_to :contest
end
# console
Contest.new.claim_template
#=> NoMethodError: undefined method `quoted_table_name' for ClaimTemplate:Class
好的,我们将quoted_table_name
添加到ClaimTemplate
:
def self.quoted_table_name
"claim_templates"
end
# console
Contest.new.claim_template
#=> nil
# Cool!
# But:
Contest.last.claim_template
#=> TypeError: can't convert Symbol into String
那么如何配置模型以便彼此正常工作
PS:
现在我有了这个结构,它工作正常,但我希望受益于关系(Assosiations
)。
class Contest < ActiveRecord::Base
# has_one :claim_temlate
def claim_template
ClaimTemplate.where(:contest_id => self.id).first
end
# Mongoid going to be crazy without this hack
def self.using_object_ids?
false
end
end
答案 0 :(得分:3)
有一个名为Tenacity的有趣宝石似乎可以做你想要的,使用t_has_one,t_has_many和t_belongs_to而不是正常的关联。
因为它目前只有那些关系,所以它有点受限,而我现在正在努力与多对多,但这可能会帮助你。
请在此处查看 - https://github.com/jwood/tenacity
答案 1 :(得分:2)
我不确定这是否已经正式实施。关联主要通过ActiveRecord::Reflection
来处理,{{1}}硬编码为关系表的概念,请参阅此类:
这表明ActiveRecord关联无法使用Mongoid之类的东西。
我建议构建一个gem来解决这个问题,方法是为Mongoid构建一个类似的反射包装器,或者只是手动构建相关的对象。