2010-01-15 155 views
1

當我定義用戶has_many會議時,它會自動創建一個與用戶集合關聯的「user_id」 鍵/值對。除了我不能運行任何 mongo_mapper使用此值查找,沒有它返回nil或[]。Mongomapper查詢收集問題

Meeting.first(:USER_ID => 「1234」)

Meeting.all(:USER_ID => 「1234」)

Meeting.find(:USER_ID => 「1234」)

全部返回零。是否有另一種語法?基本上我不能在自動生成的關聯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 

回答

0

您可以嘗試使用

Meeting.find_by_user_id "1234" 

另外,如果你運行腳本/控制檯,然後就Meeting.all顯示每個記錄具有分配給它的USER_ID?

0

那麼User.find(「1234」)會議呢?

2

由於Jimmy提到關於檢查Meeting.all,我不認爲你會有什麼。

根據你上面的例子,我看到一些潛在的問題。
- 您的用戶需要:USER_NAME所以它沒有得到保存
- 永遠不會被保存,因爲你沒有設置這是需要
的名字 - 您的會議中,無法保存任何
- 還有一件事,您需要將您的會議Concat的到user.meetings

這適用於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 

您可能已經想通了這一點,但我希望這是有益的反正。