Rust导入模块时报错could not find `schema` in `super`如何解决
问题原因
- 误用
#[path]属性声明模块:Rust中mod xxx;是在当前模块下新增一个子模块,你在playlist_response.rs中通过#[path = "../../models.rs"] mod models;的写法,相当于把models.rs绑定为了response模块的子模块,此时models.rs中的super指向的是response模块的父级(即model目录对应的模块),自然找不到根目录下的schema.rs。 - 根模块未注册:你的
main.rs中没有声明mod schema;和mod models;,这两个文件没有被注册为crate的根模块,即使路径正确也无法被全局引用。
修复步骤
- 先在
main.rs中注册根模块,添加如下两行:
mod schema; mod models;
- 删除
playlist_response.rs中手动声明mod的代码,替换为基于crate根路径的导入:
// 删除下面两行 // #[path = "../../models.rs"] // mod models; // 替换为根路径导入 use crate::models::QueryPlaylist;
- (可选稳健优化)将
models.rs中的相对路径导入改为绝对根路径导入,避免后续其他地方导入时再出现路径问题:
// 把super::schema改为crate::schema use crate::schema::posts; use crate::schema::playing_record; use crate::schema::favorites; use crate::schema::songs; use crate::schema::playlist; use crate::schema::album;
修改完成后重新执行cargo build即可正常编译。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

