我正在尝试在Rust中实现特征diesel::Insertable<table
。
单位:mail.rs
diesel::insert_into(mailing_list).values(
email // This is a String
).execute(connection);
这是因为以下代码会导致此错误:
error[E0277]: the trait bound `std::string::String: diesel::Insertable<table>` is not satisfied
--> src/mail.rs:18:10
|
17 | diesel::insert_into(mailing_list).values(
| ------ required by a bound introduced by this call
18 | email
| ^^^^^ the trait `diesel::Insertable<table>` is not implemented for `std::string::String`
再多看一点Diesel的文档,我认为应该创建一个派生Insertable的结构体
在models.rs
中
#[derive(Insertable)]
pub struct NewSubscriber {
pub email: String
}
但是我得到了
but im getting this error
error[E0433]: failed to resolve: use of undeclared crate or module `new_subscribers`
--> src/models.rs:13:12
|
13 | pub struct NewSubscriber {
| ^^^^^^^^^^^^^ use of undeclared crate or module `new_subscribers`
我很困惑为什么编译器说它找不到我试图定义的带有结构体的板条箱或模块。
1条答案
按热度按时间wj8zmpe11#
从
Insertable
derive宏的文档中:要实现
Insertable
,此派生需要知道相应的表类型。默认情况下,它使用snake_case
类型名称,并从当前作用域添加s
。可以使用#[diesel(table_name = something)]
更改此默认值。所以你需要用
table!
定义一个“new_subscriber”表,如果你已经这样做了,确保你把它导入到作用域中,或者如果你已经有一个表并且它在作用域中但是有一个不同的名字,添加上面的属性。根据insert语句判断,要插入的表看起来像是
mailing_list
,所以使用最后一个选项: