Scopes
Welds supports name scopes to help abstract away complicated queries.
Introduction
Often when working with data in a database there is a need to reuse filters. This can be useful to keep complicated logic in a single location. Welds provides a nice mechanism to write reusable snippets of queries.
How to write a scope
To write a scope in welds start off with a trait defining your scope.
#![allow(unused)]
fn main() {
pub trait ProductScopes {
fn ready_to_sell(self) -> Self;
}
}
Next implement your trait for the querybuilder and your model.
#![allow(unused)]
fn main() {
impl ProductScopes for QueryBuilder<Product> {
fn ready_to_sell(self) -> Self {
self.where_col(|p| p.active.not_equal(false))
.where_col(|p| p.price.not_equal(None))
.where_col(|p| p.description.not_equal(None))
}
}
}
How to use a scope
Once written, your scopes are available any time you write a query as long as your trait is included in the module.
#![allow(unused)]
fn main() {
// top of file
use ProductScopes;
let data = Product::all().ready_to_sell().run(&client).await?;
}