Model configuration is fully documented here on SailsJS.org. @umassthrower is correct in pointing out that adding an instance method to config/models.js
would add it to all of your models; he's also correct in observing that this is not the intended use of the config file.
The reason you're finding this a bit more challenging in Sails than Rails is that Ruby has real classes and inheritance, and Javascript just has objects. One fairly clean way to simulate inheritance and extend your model objects from a "base" object would be to use something like Lodash's _.merge
function. For example you could save your base model in lib/BaseModel.js
:
// lib/BaseModel.js
module.exports = {
attributes: {
someAttribute: 'string',
someInstanceFunction: function() {
// do some amazing (synchronous) calculation here
}
}
};
Then in your model file, require lodash
and use _.extend
:
// api/models/MyModel.js
var _ = require('lodash');
var BaseModel = require("../../lib/BaseModel.js");
module.exports = _.merge({}, BaseModel, {
attributes: {
someOtherAttribute: 'integer'
}
};
The attributes from your base model will be merged with MyModel
, with MyModel
taking precedence.
Setting the first argument to the empty model {}
is important here; _.merge
is destructive for the first object sent in, so if you just did _.merge(BaseModel, {...}
then the base model would be modified.
Also, remember to npm install lodash
!