2013-05-22 3 views
0

У меня есть две модели:Mongomapper запрос на 'belongs_to' модели

class Post 
include MongoMapper::Document 

many :comments 

key :content, String 
end 

и

class Comment 
    include MongoMapper::Document 

    belongs_to :post 

    key :post_id, ObjectId 
    key :content, String 

end 

в Рельсы сеансу консоли можно найти все сообщения:

Post.all # -> [#<Post _id: BSON::ObjectId('519b0b613… 

и все комментарии, связанные с сообщением:

post = Post.first # -> #<Post _id: BSON::ObjectId('519b0b613e477b… 
post.comments  # -> [#<Comment _id: BSON::ObjectId('519d14f93e… 

однако, следующий запрос странно возвращает пустой массив

Comment.all # -> [] 

Почему? Как я могу получить список всех комментариев независимо от сообщений?

ответ

0

С моделями точно в соответствии с вашим постом он работает для меня, как показано в следующем тесте: бегущие рельсы (3.2.13), mongo_mapper (0.12.0), mongo (1.6.4). В следующий раз, пожалуйста, напишите полный минимальный скрипт, вы, вероятно, просто имеете простую ошибку.

тест/блок/post_test.rb

require 'test_helper' 

class PostTest < ActiveSupport::TestCase 
    def setup 
    Post.delete_all 
    Comment.delete_all 
    end 

    test "post and comment" do 
    post = Post.create(:content => 'Twas brillig') 
    comment = Comment.create(:post_id => post.id, :content => 'and the slythy toves') 
    post.comments << comment 
    assert_equal 1, Post.count 
    assert_equal 1, Comment.count 
    puts 
    puts "all posts: #{Post.all.inspect}" 
    puts "first post comments: #{Post.first.comments.inspect}" 
    puts "all comments: #{Comment.all.inspect}" 
    end 
end 

$ рейка тест

опции Run:

# Running tests: 

[1/1] PostTest#test_post_and_comment 
all posts: [#<Post _id: BSON::ObjectId('51ddb56a7f11ba9bbf000001'), content: "Twas brillig">] 
first post comments: [#<Comment _id: BSON::ObjectId('51ddb56a7f11ba9bbf000002'), content: "and the slythy toves", post_id: BSON::ObjectId('51ddb56a7f11ba9bbf000001')>] 
all comments: [#<Comment _id: BSON::ObjectId('51ddb56a7f11ba9bbf000002'), content: "and the slythy toves", post_id: BSON::ObjectId('51ddb56a7f11ba9bbf000001')>] 
Finished tests in 0.036030s, 27.7546 tests/s, 0.0000 assertions/s. 
1 tests, 0 assertions, 0 failures, 0 errors, 0 skips 

ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0] 
Смежные вопросы