Ruby on rails 3 Mongoid-是否可以嵌入模型所嵌入的内容?
是否可能存在以下类型的关系: 用户: 任务: 但是,当我在Ruby on rails 3 Mongoid-是否可以嵌入模型所嵌入的内容?,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails 3,Mongodb,Mongoid,是否可能存在以下类型的关系: 用户: 任务: 但是,当我在rails控制台中尝试它时,我得到了以下结果: > u1 = User.where(...).first > u2 = User.where(...).first > task = Task.new > task.user = u1 > task.sender = u2 NoMethodError: undefined method `first' for #<Task:0x47631bc9
rails控制台中尝试它时,我得到了以下结果:
> u1 = User.where(...).first
> u2 = User.where(...).first
> task = Task.new
> task.user = u1
> task.sender = u2
NoMethodError: undefined method `first' for #<Task:0x47631bc9>
from org/jruby/RubyKernel.java:227:in `method_missing'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/attributes.rb:166:in `method_missing'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:292:in `substitute'
from org/jruby/RubyProc.java:270:in `call'
from org/jruby/RubyProc.java:220:in `call'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:61:in `atomically'
from org/jruby/RubyProc.java:270:in `call'
from org/jruby/RubyProc.java:220:in `call'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:82:in `count_executions'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:60:in `atomically'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:290:in `substitute'
from org/jruby/RubyKernel.java:1787:in `tap'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:283:in `substitute'
from /Users/larry/.rvm/gems/jruby-1.6.7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/accessors.rb:128:in `tasks='
from org/jruby/RubyProc.java:270:in `call'
from org/jruby/RubyKernel.java:2080:in `send'
>u1=User.where(…).first
>u2=用户。其中(…)。第一个
>task=task.new
>task.user=u1
>task.sender=u2
NoMethodError:未定义的方法“first”#
来自org/jruby/RubyKernel.java:227:in'method\u missing'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/attributes.rb:166:in'method_missing'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:292:in'substitute'
来自org/jruby/RubyProc.java:270:in'call'
来自org/jruby/RubyProc.java:220:in'call'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:61:in“原子地”
来自org/jruby/RubyProc.java:270:in'call'
来自org/jruby/RubyProc.java:220:in'call'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:82:in'count_executions'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/atomic.rb:60:in“原子地”
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:290:in'substitute'
来自org/jruby/RubyKernel.java:1787:in'tap'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/embedded/many.rb:283:in'substitute'
来自/Users/larry/.rvm/gems/jruby-1.6。7@entercamp/gems/mongoid-2.4.6/lib/mongoid/relations/accessors.rb:128:in'tasks='10〕
来自org/jruby/RubyProc.java:270:in'call'
来自org/jruby/RubyKernel.java:2080:in'send'
这种定义是不可能的,还是出现了其他问题?听起来您希望将单个任务存储在用户中,而发送方用户存储在该任务中
在这种情况下,要在rails控制台中测试这一点,您需要执行以下操作:
> assignee = User.where(...).first
> assigner = User.where(...).first
> task = Task.new
> task.sender = assigner
> task.save
> assignee.task = task
> assignee.save
对吧??在这种情况下,我认为您的类可能如下所示:
任务
class Task
embedded_in :assignee, :class_name => "User"
embeds_one :assigner, :class_name => "User"
end
用户
class User
embeds_many :tasks
embedded_in :task
end
为什么不在任务文档中嵌入两个用户,一个为发件人,一个为用户?添加了一个具有您的层次结构的答案,让我知道您是否正在寻找。如果embedded_in:Task
添加到user
模型,然后用户无法直接访问,因为它嵌入了另一个模型中。发件人不能,但分配可以。当然,根据您的喜好调整。您的示例不起作用的原因是没有定义关系的另一面。查看mongoid文档关系部分中的“反向”。
class Task
embedded_in :assignee, :class_name => "User"
embeds_one :assigner, :class_name => "User"
end
class User
embeds_many :tasks
embedded_in :task
end