我正试图用activx和diesel创建一个基本的crud应用程序,但diesel出现了问题。这是项目的文件夹结构:
|─ migrations
|─ src
| ├─ users
| ├─mod.rs
| ├─models.rs
|─ main.rs
|─ schema.rs
其中schema.rs由diesel通过运行迁移命令创建和管理。
这些是文件及其内容:
mod.rs
pub mod models;
pub mod routes;
pub use models::*;*
pub use routes::;
models.rs
use diesel::{Insertable, Queryable};
use crate::schema::users;
#[derive(Queryable)]
pub struct User {
pub id: i64,
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}
#[derive(Insertable)]
#[table_name = "users"]
pub struct NewUser {
pub email: String,
pub password_hash: String,
pub confirmed: bool,
}
main.rs
#![allow(unused)]
#[macro_use]
extern crate diesel;
mod users;
mod schema;
use diesel::pg::PgConnection;
use diesel::prelude::*;
use diesel::query_dsl::methods::FindDsl;
use dotenv::dotenv;
use std::env;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url))
}
fn main() -> std::io::Result<()> {
let connection = establish_connection();
use schema::users::dsl as users_dsl;
let results = users_dsl::users.filter(users_dsl::confirmed.eq_all(true)).limit(5).load::<users::models::User>(&connection).expect("Error loading users") ;
for _user in results {
println!("user id {} with mail {}", _user.id, _user.email)
}
Ok(())
}
和schema.rs:
table! {
users (id) {
id -> Int8,
email -> Varchar,
password_hash -> Varchar,
confirmed -> Bool,
}
}
问题是当我试图将模式从crate根导入到user/models.rs-rustc说";未解析的导入CCD_ 1在机箱根"中找不到CCD_;但是rust分析器会提示该模块中存在的内容(例如dsl、表及其列(。
那么问题出在哪里呢?
刚刚发现我必须在一个名为lib.rs的文件中导入模式模块(如果不存在,请创建它(:
src/lib.rs
pub mod schema;
#[macro_use]
extern crate diesel;
因此它将可以通过访问
use crate::schema::*;
注意,lib.rs
内部需要macro_use
才能在schema.rs
中使用table!
宏而不会出现任何错误。