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

Posted

技术标签:

【中文标题】Rust Diesel 未构建错误使用未声明的板条箱或模块【英文标题】:Rust Diesel not building with error use of undeclared crate or module 【发布时间】:2021-05-29 13:22:50 【问题描述】:

我正在尝试创建我的第一个具有数据库支持的 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, Debug, Identifiable)]
pub struct Correspondent 
    pub id: i32,
    pub name: String,


#[derive(Queryable, Debug, Identifiable)]
pub struct Doctype 
    pub id: i32,
    pub name: String,
    pub correspondent_name: Option<String>,
    pub support_extra_date_number: Option<bool>,
    pub icon: Option<Binary>,


#[derive(Queryable, Debug, 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,
        name -> Text,
    


table! 
    doctype (id) 
        id -> Integer,
        name -> Text,
        correspondent_name -> Nullable<Text>,
        support_extra_date_number -> Nullable<Bool>,
        icon -> Nullable<Binary>,
    


table! 
    document (number, date_of_document, 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 新手,我仍然习惯它的范式

【问题讨论】:

【参考方案1】:

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...

【讨论】:

以上是关于Rust Diesel 未构建错误使用未声明的板条箱或模块的主要内容,如果未能解决你的问题,请参考以下文章

使用 Diesel 的 `belongs_to` 属性时“使用未声明的类型或模块”

是否可以拥有一个同时具有程序宏和逻辑的板条箱?

Rust Diesel 无法编译并出现链接器错误

返回使用 Rocket 和 Diesel (Rust) 在 PostgreSQL 中创建的单个记录

运行 Diesel CLI 工具时出现“未找到序数”

Rust Diesel 原始 SQL 给出错误“`std::result::Result<Vec<T>,diesel::result::Error>` 所需的类型注释”