2012-05-09 61 views
17

Mam pewne problemy z mongoid:nie Mongoid w zapytaniu

test "Test candidate" do 
    User.create(:id => 1, :sex => User::Male, :country => 1, :city => 1) 
    User.create(:id => 2, :sex => User::Female, :country => 1, :city => 1) 
    User.create(:id => 3, :sex => User::Female, :country => 1, :city => 1) 

    user = User.not_in(:id => [2]).second 
    assert_not_equal(user.id, 2) 
    end 

test zakończył się niepowodzeniem. Próbowałem użyć where (: id => {'$ nid' => [2]}), ale ma taki sam efekt.

Co jest nie tak? Jak używać warunku "nie w" z mongoidem?

PS, "drugi" jest ok, z "pierwszej" test przeszedł, bo id = 1

Odpowiedz

34

Spróbuj zapytanie:

user = User.not_in(:_id => [2]).second 

W MongoDB klucz podstawowy ma nazwę _id. Mongoid próbuje być przyjacielski i częściowo ukrywa ten fakt przed deweloperem, aliasingując go do id w modelu obiektowym. Ale kiedy robisz zapytania, nie możesz stwierdzić, czy chcesz klucz podstawowy _id, czy zupełnie zwykłe pole id.