It seems to work with a fresh project.
[dusty@dustybook:~/tmp/tester] $ mongod --version
db version v2.0.0, pdfile version 4.5
Thu Sep 29 22:01:41 git version:
695c67dff0ffc361b8568a13366f027caa406222
[dusty@dustybook:~/tmp/tester] $ cat Gemfile
source :rubygems
gem 'mongo_mapper'
gem 'bson_ext'
[dusty@dustybook:~/tmp/tester] $ bundle list
Gems included by the bundle:
* activemodel (3.1.0)
* activesupport (3.1.0)
* bcrypt-ruby (3.0.1)
* bson (1.4.0)
* bson_ext (1.4.0)
* builder (3.0.0)
* bundler (1.0.18)
* i18n (0.6.0)
* mongo (1.4.0)
* mongo_mapper (0.9.2)
* multi_json (1.0.3)
* plucky (0.3.8)
[dusty@dustybook:~/tmp/tester] $ cat tester.rb
require 'rubygems'
require 'bundler/setup'
require 'mongo_mapper'
MongoMapper.connection = Mongo::Connection.new
MongoMapper.database = 'tester'
class User
include MongoMapper::Document
key :email, String, :required => true
key :app_id, Integer, :required => true
validates_uniqueness_of :email, :scope => :app_id
end
[dusty@dustybook:~/tmp/tester] $ irb -r ./tester.rb
irb(main):001:0> u = User.new(:email => '
a...@b.com', :app_id => 1)
=> #<User _id: BSON::ObjectId('4e85225ce8f315a8bc000001'), app_id: 1,
email: "
a...@b.com">
irb(main):002:0> u.save
=> true
irb(main):003:0> u = User.new(:email => '
a...@b.com', :app_id => 2)
=> #<User _id: BSON::ObjectId('4e85226ce8f315a8bc000003'), app_id: 2,
email: "
a...@b.com">
irb(main):004:0> u.save
=> true
irb(main):005:0> u = User.new(:email => '
a...@b.com', :app_id => 1)
=> #<User _id: BSON::ObjectId('4e852278e8f315a8bc000005'), app_id: 1,
email: "
a...@b.com">
irb(main):006:0> u.save
=> false
irb(main):007:0> u.errors
=> #<ActiveModel::Errors:0x007ff7ea68b408 @base=#<User _id:
BSON::ObjectId('4e852278e8f315a8bc000005'), app_id: 1, email:
"
a...@b.com">, @messages={:email=>["has already been taken"]}>