问题描述
我正在尝试创建我的第一个支持数据库的 Rust 应用程序,我正在使用 Diesel 和 sqlite,每当我构建我的应用程序时,我都会收到以下错误消息:
Failed to resolve: use of undeclared crate or module `categorys`
--> src/models.rs:14:12
|
14 | pub struct Category {
| ^^^^^^^^ use of undeclared crate or module `categorys`
error[E0433]: Failed to resolve: use of undeclared crate or module `correspondents`
--> src/models.rs:21:12
|
21 | pub struct Correspondent {
| ^^^^^^^^^^^^^ use of undeclared crate or module `correspondents`
error[E0433]: Failed to resolve: use of undeclared crate or module `doctypes`
--> src/models.rs:27:12
|
27 | pub struct Doctype {
| ^^^^^^^ use of undeclared crate or module `doctypes`
error[E0433]: Failed to resolve: use of undeclared crate or module `documents`
--> src/models.rs:37:12
|
37 | pub struct Document {
| ^^^^^^^^ use of undeclared crate or module `documents`
error: aborting due to 4 prevIoUs errors
我的cargo.toml
:
[package]
name = "Rekorder"
version = "0.1.0"
authors = ["ossama"]
edition = "2018"
# See more keys and their deFinitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
diesel = { version = "1.4.4",features = ["sqlite"] }
diesel_cli_ext = "0.3.6"
dotenv = "0.15.0"
chrono = "0.4"
[dependencies.gtk]
version = "0.9.0"
features = ["v3_16"]
[dependencies.gio]
version = ""
features = ["v2_44"]
我的models.rs
:
// Generated by diesel_ext
#![allow(unused)]
#![allow(clippy::all)]
use chrono::NaiveDate;
use diesel::Queryable;
use diesel::Identifiable;
use diesel::sql_types::Binary;
#[derive(Queryable,Debug,Identifiable)]
pub struct Category {
pub id: i32,pub name: String,pub color: Option<i32>,}
#[derive(Queryable,Identifiable)]
pub struct Correspondent {
pub id: i32,Identifiable)]
pub struct Doctype {
pub id: i32,pub correspondent_name: Option<String>,pub support_extra_date_number: Option<bool>,pub icon: Option<Binary>,Identifiable)]
#[primary_key(number,date_of_document,doc_type_id)]
pub struct Document {
pub number: i32,pub date_of_document: NaiveDate,pub doc_type_id: i32,pub extra_number: Option<String>,pub extra_date: Option<NaiveDate>,pub correspondent_id: i32,pub content: String,pub notes: Option<String>,pub category_id: Option<i32>,pub document_file_name: Option<String>,pub document_file_size: Option<i32>,pub document_file: Option<Binary>,}
我的schema.rs
:
table! {
category (id) {
id -> Integer,name -> Text,color -> Nullable<Integer>,}
}
table! {
correspondent (id) {
id -> Integer,}
}
table! {
doctype (id) {
id -> Integer,correspondent_name -> Nullable<Text>,support_extra_date_number -> Nullable<Bool>,icon -> Nullable<Binary>,}
}
table! {
document (number,doc_type_id) {
number -> Integer,date_of_document -> Date,doc_type_id -> Integer,extra_number -> Nullable<Text>,extra_date -> Nullable<Date>,correspondent_id -> Integer,content -> Text,notes -> Nullable<Text>,category_id -> Nullable<Integer>,document_file_name -> Nullable<Text>,document_file_size -> Nullable<Integer>,document_file -> Nullable<Binary>,}
}
joinable!(document -> category (category_id));
joinable!(document -> correspondent (correspondent_id));
joinable!(document -> doctype (doc_type_id));
allow_tables_to_appear_in_same_query!(
category,correspondent,doctype,document,);
最后是我的main.rs
:
mod models;
fn main() {
println!("Hello,world!");
}
我尝试将 use schema::*
添加到我的 model.rs
中,但没有成功,因为找不到模型。
我也试过 this solution 没有成功。
我无法使用正确的范围,我是 Rust 新手,我仍然习惯于它的范式
解决方法
Diesel 假定您的表名是您的结构名称的复数蛇形大小写形式。由于您的表名不遵循此约定,因此您可以明确指定表名:
#[derive(Queryable,Identifiable)]
#[table_name = "category"]
pub struct Category {
// ...
}
#[derive(Queryable,Identifiable)]
#[table_name = "correspondent"]
pub struct Correspondent {
// ...
}
// and do the same to the rest of your models...