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

最佳答案

我不确定这是否已经正式实施。关联主要是通过ActiveRecord::Reflection来处理的,而是按照关系表的思想硬编码的,请参见此类:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/reflection.rb
这表明activerecord关联无法处理mongoid之类的东西。
我建议要么构建一个gem来解决这个问题,为mongoid构建一个类似的反射包装器,要么手工构建相关的对象。

10-07 21:51