问题描述
我有一个包含 postgres 数据库表结构的文件“user.rs”。每当我尝试将它包含在我的 main.rs 文件(一个 Rocket web 项目)中时,所有的 Diesel “东西”都无法解析。这是我的 user.js 文件:
const PapeConainer = () => {
return (
<div //some classes and other stuff>
{magic.children}
</div>
);
}
这是我的 main.rs:
var slider_img = document.querySelector('.shoe_image');
var images = ['shoe_green.png','shoe_red.png','shoe_blue.png','shoe_yellow.png','shoe_black.png'];
var i = 0; //Index of current image
function prev() //'PrevIoUs' button
{
if(i <= 0) i = 5;
i--;
return setImg();
}
function next() //'Next' button
{
if(i >= 4) i = -1;
i++;
return setImg();
}
function setImg() //Setting image in slider
{
return slider_img.setAttribute('src','images/shoes/'+images[i]);
}
如果我从 main.rs 中删除 use super::schema::users;
pub mod handler;
pub mod repository;
pub mod router;
#[derive(Queryable,AsChangeset,Serialize,Deserialize)]
#[table_name = "users"]
pub struct User {
pub id: String,pub username: String,pub password: String,}
#[derive(Insertable)]
#[table_name = "users"]
pub struct Insertableuser {
username: String,password: String,}
pub impl Insertableuser {
pub fn from_user(user: User) -> Insertableuser {
Insertableuser {
username: user.username,password: user.password,}
}
}
pub fn all(connection: &PgConnection) -> QueryResult<Vec<User>> {
users::table.load::<User>(&*connection)
}
pub fn get(id: i32,connection: &PgConnection) -> QueryResult<User> {
users::table.find(id).get_result::<User>(connection)
}
pub fn insert(user: User,connection: &PgConnection) -> QueryResult<User> {
diesel::insert_into(users::table)
.values(&Insertableuser::from_user(user))
.get_result(connection)
}
pub fn update(id: i32,user: User,connection: &PgConnection) -> QueryResult<User> {
diesel::update(users::table.find(id))
.set(&user)
.get_result(connection)
}
pub fn delete(id: i32,connection: &PgConnection) -> QueryResult<usize> {
diesel::delete(users::table.find(id)).execute(connection)
}
,则不会出现错误。当我运行 #![feature(proc_macro_hygiene,decl_macro)]
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate rocket_contrib;
use rocket_contrib::databases::diesel;
#[database("camera-server-db")]
struct CameraServerDbConn(diesel::PgConnection);
mod user;
#[get("/")]
fn index() -> &'static str {
"Hello World!"
}
fn main() {
rocket::ignite()
.attach(CameraServerDbConn::fairing())
.mount("/",routes![index])
.launch();
}
时,我得到很多“在此范围内找不到 x”。举个例子:
mod user;
我正在尝试遵循 this guide(这确实已经过时了,但它是我能找到的仅有的实际指南之一)。
解决方法
如“最后一步”部分的链接指南中所述,您需要正确导入柴油,否则编译器无法解析这些特征/派生/函数。这意味着您需要按如下方式更改您的 main.rs
文件:
#![feature(proc_macro_hygiene,decl_macro)]
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate rocket_contrib;
#[macro_use]
extern crate diesel;
use rocket_contrib::databases::diesel;
#[database("camera-server-db")]
struct CameraServerDbConn(diesel::PgConnection);
mod user;
#[get("/")]
fn index() -> &'static str {
"Hello World!"
}
fn main() {
rocket::ignite()
.attach(CameraServerDbConn::fairing())
.mount("/",routes![index])
.launch();
}
(注意 extern crate 部分中的额外 #[macro_use] extern crate diesel;
。)