1

当我定义用户 has_many 会议时,它会自动创建一个与用户集合相关的“user_id”键/值对。除了我不能使用这个值运行任何 mongo_mapper 发现,没有它返回 nil 或 []。

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
4

3 回答 3

2

正如Jimmy提到的有关检查 Meeting.all 的内容,我认为您不会有任何东西。

根据您上面的示例,我看到了几个潜在的问题。
- 您的用户需要一个 :user_name,因此它不会被保存
- 永远不会被保存,因为您没有设置所需的名称
- 您的会议也没有被保存
- 还有一件事,您需要将会议连接到用户会议

这适用于 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

那么 User.find("1234").meetings 呢?

于 2010-01-18T20:09:10.957 回答
0

您可以尝试使用

Meeting.find_by_user_id "1234"

另外,如果您运行脚本/控制台,Meeting.all 是否将每条记录显示为分配给它的 user_id?

于 2010-01-16T04:59:44.463 回答