2012-11-30 53 views
1

我想創建它引用到另一個模型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! 

至於結果在數據庫中,我看到的只有內容字段。沒有作者字段。

我該怎麼做,我做錯了什麼?

[答案] 我困惑了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

嘗試使用現有的用戶對象,而不是用戶User.new,你也可以嘗試belongs_to的,而不是HAS_ONE使用,它存儲我想同樣的數據,好運

0

很好用我倒是開始說一個帖子屬於一個用戶而不是相反,感覺更好,但這只是一個選擇問題。

你是什麼「在數據庫中,我看到的只有內容字段。沒有作者場。」意思

如果您只是在rails控制檯中鍵入「post」,您不應該看到作者,因爲它是參考字段。 如果你想看到所有的屬性,post.attributes將列出一切,包括引用。和post.attributes.inspect會告訴你它是如何存儲在數據庫中

+0

哦對不起,以上僅適用於嵌入式對象。 其實,你可以使用這種伎倆看到「belongs_to的」字段: '後= Post.new Post.find(後)' 我還在尋找一種方式來顯示所有「的has_many」引用 –