Проблема сбора запросов Mongomapper - PullRequest
1 голос
/ 15 января 2010

Когда я определяю собрания пользователя 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

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

Как Джимми упомянул о проверке Meeting.all, я не думаю, что у вас будет что-нибудь.

Основываясь на вашем примере выше, я вижу пару потенциальных проблем.
- Вашему пользователю требуется: имя_пользователя, чтобы оно не сохранялось
- никогда не будет сохранен, потому что вы не установили имя, которое требуется
- Ваше собрание также не сохраняется
- Еще одна вещь, вам нужно согласовать вашу встречу с пользователем. Встречи

Это работает с 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

Возможно, вы уже поняли это, но я надеюсь, что это в любом случае полезно.

0 голосов
/ 18 января 2010

А как насчет только User.find ("1234"). Собраний?

0 голосов
/ 16 января 2010

Вы можете попробовать использовать

Meeting.find_by_user_id "1234"

Кроме того, если вы запускаете скрипт / консоль, то Meeting.all показывает каждую запись как присвоенную ей user_id?

...