我想创建引用另一个的模型:
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
其他一切都有问题。
答案 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应该会像对我一样起作用。