2010-01-15 74 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 

您可能已经想通了这一点,但我希望这是有益的反正。