Open eddieajau opened 9 years ago
I achieve this in my applications by passing the waterline instance into the scope of the model definition.
// Model.js
module.exports = function(waterline) {
return {/* model definition */};
}
See https://github.com/devinivy/dogwater/blob/master/lib/index.js#L17-L35
I do agree that a public API for this would be useful, as it's a common issue that gets asked!
I want to start a new helper project to make waterline more user friendly when used standalone but still didn't get around to do it...
I too don't like polluting the global namespace, my strategy is to add an attribute instance to all my model definitions containing the model instance. Then, in my controller I can do:
var User = require('user').instance;
I however usually avoid using models in my lifecycle callbacks as I don't like having CRUD code in my model definition files. For cases like yours I would probably create some sort of ControllerUtil class to do that. Just a design preference, I guess... Nothing I feel too strong about.
BTW @eddieajau, have you tried using this
, apparently added in balderdashy/waterline#717:
beforeValidate: function(values, cb) {
this.findOne({
where: criteria,
sort: { updatedAt: 'desc' }
}).exec(function(err, user) {
values.counter = user ? 0 : user.counter + 1;
cb();
});
Another example of why we need a code+docs contribution policy :)
I agree there are lots of strategies for solving the example, but I think the immediate problem is the example needs explain the assumptions about where the dependency might have come from. Probably just a sentence explaining that Probable_suspects
is in the scope of the code "somehow"?
Another example of why we need a code+docs contribution policy :)
I agree it's good people provide docs but I don't like being too strict about it as it may make some people lose interest in contributing if they feel it's an involved process.
the example needs explain the assumptions about where the dependency might have come from
Agreed.
The example for
beforeValidate
assumes thatProbable_suspects
is exposed globally, as it would be in Sails. However, this is not the case for Waterline, but it does lead me to ask can we expose some API to be able to get other collections whilst in the life-cycle hooks.The immediate problem is how to correct the docs. I guess this will require a note to say that the application developer needed to expose a global for the model in the bootstrap code (I actually dislike polluting the global namespace in this way).
And/or we can solve it by deciding that the example use-case is useful and it need to lead to a code fix?
For example, something like this would be ideal:
Thanks in advance.