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

ruby-on-rails – Mongoid使用has_one将一个对象与同一个类的两个不同对象相关联,第1张

概述我已经看到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, :i 我已经看到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(加载源代码的顺序现在很重要,因此这个解决方案并不理想)

总结

以上是内存溢出为你收集整理的ruby-on-rails – Mongoid使用has_one将一个对象与同一个类的两个不同对象相关联全部内容,希望文章能够帮你解决ruby-on-rails – Mongoid使用has_one将一个对象与同一个类的两个不同对象相关联所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1286197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存