I wrote a contract A that creates a new contract B and returns the address of the new contract B that's been created.  When I tested this on solidity browser it seems to work well, but when I tried to run the create method using web3, I keep getting this error: 

            throw errors.InvalidResponse(result);
        ^
    Error: VM Exception while processing transaction: out of gas

Here's my contract code: 

    pragma solidity ^0.4.2; 
    contract B { 
       int public id;
       function B(int _id) { 
         id = _id;
       }
    } 

    contract A { 
       address Baddress;
       function createB(int _id) returns (address) { 
         Baddress = new B(_id); 
         return Baddress;
       } 
    }


Here's my Javascript code that attempts to run A's createB method:

    web3.eth.defaultAccount = web3.eth.coinbase;
    var Acontract = web3.eth.contract([{"constant":false,"inputs":[],"name":"getdum","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"num","type":"int256"}],"name":"create","outputs":[],"payable":false,"type":"function"}]);
    
    var A = Acontract.new({from: web3.eth.accounts[0], 
    data: '{{compiled byte code}}', 
    gas: '47000000'}, function (e, contract){
       console.log(e, contract);
       if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address);
         contract.create(5000).then(console.log); // This line throws the error
       }
    })


I've read many other related posts and could only find answers that suggest to use more gas, but no matter how much gas I sent with the transaction, it would throw the same error.  You can see I'm using a really large value for gas in the code. Can anyone help me identify what I'm doing wrong? I'm using solc Version: 0.4.9+commit.364da425.Darwin.appleclang, EthereumJS TestRPC v3.0.3, and node v6.4.0.