1

ユーザー has_many ミーティングを定義すると、「user_id」キーと値のペアが自動的に作成され、ユーザー コレクションに関連付けられます。nil または [] を返さない限り、この値を使用して mongo_mapper の検索を実行することはできません。

Meeting.first(:user_id => "1234")

Meeting.all(:user_id => "1234")

Meeting.find(:user_id => "1234")

すべて nil を返します。別の構文はありますか?基本的に、自動生成された連想 ObjectId に対してクエリを実行することはできません。



# Methods

class User
  include MongoMapper::Document

  key :user_name, String, :required => true
  key :password, String

  many :meetings
end

class Meeting
  include MongoMapper::Document

  key :name, String, :required => true
  key :count, Integer, :default => 1
end


# Sinatra

get '/add' do
  user = User.new
  user.meetings  "foobar") #should read: Meeting.new(:name => "foobar")
  user.save
end

get '/find' do
  test = Meeting.first(:user_id => "4b4f9d6d348f82370b000001") #this is the _id of the newly create user
  p test # WTF! returns []
end
4

3 に答える 3

2

Jimmyが Meeting.all のチェックについて述べたように、何も持っていないと思います。

上記の例に基づいて、いくつかの潜在的な問題が見られます。
- ユーザーは :user_name を必要とするため、保存されません -
必要な名前を設定していないため、保存されません
- ミーティングも保存されません
- もう 1 つ、ミーティングを次の場所に連結する必要がありますユーザー会議

これはmongo_mapper 0.6.10で動作します

require 'rubygems'
require 'mongo_mapper'
MongoMapper.database = "meetings"

class User
  include MongoMapper::Document

  key :user_name, String, :required => true
  key :password, String

  many :meetings
end

class Meeting
  include MongoMapper::Document

  key :name, String, :required => true
  key :count, Integer, :default => 1
end

user = User.create(:user_name => "Rubyist")
user.meetings  << Meeting.create(:name => "foobar")
user.save

Meeting.first(:user_id => user.id)
User.find(user.id).meetings

もうお気づきかもしれませんが、参考になれば幸いです。

于 2010-02-12T16:39:44.507 に答える
0

使用してみることができます

Meeting.find_by_user_id "1234"

また、スクリプト/コンソールを実行すると、Meeting.all は各レコードに user_id が割り当てられていることを示しますか?

于 2010-01-16T04:59:44.463 に答える
0

User.find("1234").meetings だけではどうですか?

于 2010-01-18T20:09:10.957 に答える