1

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

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

其他一切都保持不变。

4

3 回答 3

0

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

于 2012-12-02T21:02:34.977 回答
0

好吧,首先我想说说帖子属于用户而不是相反的感觉更好,但这只是一个选择问题。

你是什​​么意思

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

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

于 2014-07-30T15:18:20.000 回答
0

已经六年了,但我会回复的。我发现解决这个问题的方法是在新方法中将嵌入式模型作为参数传递。在我的情况下,它是一个端点调用,所以我会收到一个 user_id 并想创建一个 post p = Post.new(:user_id => params[:user_id])

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

于 2018-12-11T10:37:18.130 回答