我有这个结构:
#[derive(Queryable,Associations,Identifiable)]
#[diesel(belongs_to(User))]
#[diesel(belongs_to(Task))]
pub struct UserTask{
pub id:i32,
pub user_id:i32,
pub task_id:i32
}
我实现了一个方法
pub struct TaskRepository;
impl TaskRepository{
pub async fn find_by_user(c:&mut AsyncPgConnection,user:&User)->QueryResult<Vec<Task>>{
let user_tasks = UserTask::belonging_to(&user).get_results::<UserTask>(c).await?;
let task_ids: Vec<i32> = user_tasks.iter().map(|ut: &UserTask| ut.task_id).collect();
}
为了能够使用
belonging_to(&user)
,我使用了 Associations
和 Identifiable
特征来表示 UserTask
。但这给了我这个错误:
无法解决:使用未声明的板条箱或模块
user_tasks
如果我删除这些特征,错误就会消失。我不知道如何解决这个问题。
Associations
和 Identifiable
派生宏都需要了解支持的 table!
定义。默认情况下,这将在结构名称的蛇形和 s 后缀版本的范围内查找它 - 在本例中为 user_tasks
。
您需要将支持
table!
定义的名称带入范围和/或使用 #[diesel(table_name = path::to::table)]
显式告诉派生宏它的位置。