使用引用创建mongoid模型

时间:2012-11-30 03:00:28

标签: ruby-on-rails model reference mongoid

我想创建引用另一个的模型:

class User  
  include Mongoid::Document  
  field :name, :type => String
  belongs_to :post
end 

class Post
  include Mongoid::Document  
  field :content, :type => String  
  has_one :author, :class_name => 'User'
end

但我很困惑如何使mongoDB相应地对模型文件(user.rb,post.rb)的规则起作用。

首先,我创建了模型抛出命令行:

rails generate model User name:string
rails generate model Post content:string

然后我手动编辑了模型文件。我添加了这一行

belongs_to :post
has_one :author, :class_name => 'User'

然后我在一个动作中运行代码:

post = Post.new
post.content = "text"
post.author = User.new
post.save!

作为数据库的结果,我只看到内容字段。没有作者字段。

我该怎么做以及我做错了什么?

[ANSWER] 我把has_to和belongs_to混淆了。所以正确的模型看起来像:

class User  
  include Mongoid::Document  
  field :name, :type => String
  has_many :post
end 

class Post
  include Mongoid::Document  
  field :content, :type => String  
  belongs_to :author, :class_name => 'User'
end

其他一切都有问题。

3 个答案:

答案 0 :(得分:0)

尝试使用现有的用户对象而不是用户User.new,你也可以尝试使用belongs_to而不是has_one,它会存储我想的相同数据,祝你好运

答案 1 :(得分:0)

首先,我要说一个帖子属于用户而不是相反,但这只是一个选择问题。

你是什么意思

  

"在数据库中我只看到内容字段。没有作者字段。"

如果您只是输入"发布"在rails控制台中,您不应该看到作者,因为它是一个参考字段。 如果要查看所有属性,post.attributes将列出所有内容,包括引用。并且post.attributes.inspect将显示它如何存储在数据库中

答案 2 :(得分:0)

已经六年了,但我会答复。我发现解决此问题的方法是在新方法中将嵌入式模型作为参数传递。就我而言,这是一个端点调用,因此我将收到一个user_id,并希望创建一个帖子p = Post.new(:user_id => params[:user_id])

这样做,当我保存新帖子时,它会正确连接。我相信,对于新用户,如果您以前创建过该用户,请保存该用户并使用ID建立连接,该ID应该会像对我一样起作用。