Add a relation example following Ruby on Rails active records

This commit is contained in:
Raymond Feng 2013-10-27 12:55:01 -07:00
parent 2ae0fd8804
commit 8ad0194a51
2 changed files with 95 additions and 3 deletions

90
examples/relations.js Normal file
View File

@ -0,0 +1,90 @@
var DataSource = require('../index').DataSource;
var ds = new DataSource('memory');
var Order = ds.createModel('Order', {
customerId: Number,
orderDate: Date
});
var Customer = ds.createModel('Customer', {
name: String
});
Order.belongsTo(Customer);
Customer.create({name: 'John'}, function (err, customer) {
Order.create({customerId: customer.id, orderDate: new Date()}, function (err, order) {
order.customer(console.log);
order.customer(true, console.log);
Customer.create({name: 'Mary'}, function (err, customer2) {
order.customer(customer2);
order.customer(console.log);
});
});
});
Customer.hasMany(Order, {as: 'orders', foreignKey: 'customerId'});
Customer.create({name: 'Ray'}, function (err, customer) {
Order.create({customerId: customer.id, orderDate: new Date()}, function (err, order) {
customer.orders(console.log);
customer.orders.create({orderDate: new Date()}, console.log);
customer.orders.findById('2', console.log);
customer.orders.destroy('2', console.log);
});
});
var Physician = ds.createModel('Physician', {
name: String
});
var Patient = ds.createModel('Patient', {
name: String
});
var Appointment = ds.createModel('Appointment', {
physicianId: Number,
patientId: Number,
appointmentDate: Date
});
Appointment.belongsTo(Patient);
Appointment.belongsTo(Physician);
Physician.hasMany(Patient, {through: Appointment});
Patient.hasMany(Physician, {through: Appointment});
Physician.create({name: 'Smith'}, function (err, physician) {
Patient.create({name: 'Mary'}, function (err, patient) {
Appointment.create({appointmentDate: new Date(), physicianId: physician.id, patientId: patient.id},
function (err, appt) {
physician.patients(console.log);
patient.physicians(console.log);
});
});
});
var Assembly = ds.createModel('Assembly', {
name: String
});
var Part = ds.createModel('Part', {
partNumber: String
});
Assembly.hasAndBelongsToMany(Part);
Part.hasAndBelongsToMany(Assembly);
Assembly.create({name: 'car'}, function (err, assembly) {
Part.create({partNumber: 'engine'}, function (err, part) {
assembly.parts.add(part, function(err) {
assembly.parts(console.log);
});
});
});

View File

@ -140,12 +140,14 @@ Relation.hasMany = function hasMany(anotherClass, params) {
}
function destroy(id, cb) {
this.findById(id, function (err, inst) {
var self = this;
anotherClass.findById(id, function (err, inst) {
if (err) return cb(err);
if (inst) {
if (!inst) return cb(new Error('Not found'));
if (inst[fk] && inst[fk].toString() == self.id.toString()) {
inst.destroy(cb);
} else {
cb(new Error('Not found'));
cb(new Error('Permission denied'));
}
});
}