Rust Diesel 未构建错误使用未声明的板条箱或模块

问题描述

我正在尝试创建我的第一个支持数据库的 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...