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

しかし、モデルファイル(user.rb、post.rb)のルールに従ってmongoDBを機能させる方法がわかりません。

まず、モデルをスローするコマンド ラインを作成しました。

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

次に、モデル ファイルを手動で編集しました。この行を追加しました

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

次に、1 つのアクションでコードを実行します。

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

他のすべては問題のままです。

4

3 に答える 3

0

ユーザーUser.newの代わりに既存のユーザーオブジェクトを使用してみてください。has_oneの代わりにbelongs_toを使用することもできます。これは、私が推測するのと同じデータを格納します。幸運を祈ります。

于 2012-12-02T21:02:34.977 に答える
0

まず第一に、投稿がユーザーのものであると言うよりも、ユーザーのものであると言う方が良いと思いますが、それは単なる選択の問題です.

どういう意味

「データベースには content フィールドしか表示されません。author フィールドはありません。」

Rails コンソールに「投稿」と入力しただけでは、参照フィールドであるため、作成者は表示されません。すべての属性を表示する場合は、post.attributes参照を含むすべてを一覧表示します。データベースにpost.attributes.inspectどのように保存されているかを示します

于 2014-07-30T15:18:20.000 に答える
0

6年経ちますが、お答えします。この問題を解決するために私が見つけた方法は、埋め込みモデルを新しいメソッドのパラメーターとして渡すことでした。私の場合はエンドポイント呼び出しだったので、user_id を受け取り、post を作成したいと思いますp = Post.new(:user_id => params[:user_id])

これを行うと、新しい投稿を保存すると、適切な接続が行われます。新しいユーザーの場合、以前にユーザーを作成して保存し、ID を使用して接続すると、私の場合と同じように機能するはずです。

于 2018-12-11T10:37:18.130 に答える