加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Mongoid使用has_one将一个对象与同一个类的两

发布时间:2020-12-17 02:52:12 所属栏目:百科 来源:网络整理
导读:我已经看到1:N的这类问题的解决方案,但他们似乎没有读到1:1,这是使用MongoDB 1.8,Mongoid 2.0.0.rc.8,Rails 3.0.5 class Coach include Mongoid::Document field :name,:type = String belongs_to :coached,:class_name = Team,:inverse_of = :coach,:fore
我已经看到1:N的这类问题的解决方案,但他们似乎没有读到1:1,这是使用MongoDB 1.8,Mongoid 2.0.0.rc.8,Rails 3.0.5

class Coach  
  include Mongoid::Document 
  field :name,:type => String 
  belongs_to :coached,:class_name => Team,:inverse_of => :coach,:foreign_key => "coach_id" 
  belongs_to :assisted,:inverse_of => :assist,:foreign_key => "assist_id" 
end 


class Team 
  include Mongoid::Document 
  field :name,:type => String 
  has_one :coach,:class_name => Coach,:inverse_of => :coached 
  has_one :assist,:inverse_of => :assisted 
end

然后我开始和Rails控制台会话和:

irb(main):001:0> c = Coach.new(:name => "Tom")  
=> #<Coach _id: da18348d298ca47ad000001,_type: nil,_id: BSON::ObjectId('4da18348d298ca47ad000001'),name: "Tom",coach_id: nil,assist_id: nil> 

irb(main):002:0> a = Coach.new(:name => "Dick") 
=> #<Coach _id: 4da18352d298ca47ad000002,_id: BSON::ObjectId('4da18352d298ca47ad000002'),name: "Dick",assist_id: nil> 

irb(main):003:0> t = Team.new(:name => "Allstars") 
=> #<Team _id: 4da18362d298ca47ad000003,_id: BSON::ObjectId('4da18362d298ca47ad000003'),name: "Allstars"> 

irb(main):005:0> t.coach = c 
NoMethodError: undefined method `constantize' for Coach:Class 

irb(main):005:0> c.coached = t 
NoMethodError: undefined method `constantize' for Team:Class

任何建议将不胜感激!

解决方法

您在定义Coach时引用了类Team,但该类尚不存在.
您有两种选择:

>将class_name声明为String而不是常量,例如:class_name => ‘团队'(首选,见gist)>完全删除:class_name =>团队选项让Mongoid找出参与该关联的正确类.有一点需要注意:您需要确保在类Coach之前声明类Team(加载源代码的顺序现在很重要,因此这个解决方案并不理想)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读