Rust 为什么我在Diesel结构中的可选字段中没有实现trait
我有这个结构:Rust 为什么我在Diesel结构中的可选字段中没有实现trait,rust,rust-diesel,Rust,Rust Diesel,我有这个结构: #[table_name = "clients"] #[derive(Serialize, Deserialize, Queryable, Insertable, Identifiable, Associations)] pub struct Client { pub id: Option<i64>, pub name: String, pub rank: Option<i64>, } #[table_name=“clients”
#[table_name = "clients"]
#[derive(Serialize, Deserialize, Queryable, Insertable, Identifiable, Associations)]
pub struct Client {
pub id: Option<i64>,
pub name: String,
pub rank: Option<i64>,
}
#[table_name=“clients”]
#[派生(序列化、反序列化、可查询、可插入、可识别、关联)]
发布结构客户端{
pub id:Option,
酒吧名称:String,
酒吧排名:选项,
}
以及以下实施:
impl Client {
pub fn get(name: String, connection: &PgConnection) -> Option<Self> {
match clients::table
.filter(clients::name.eq(&name))
.limit(1)
.load::<Client>(connection)
{
Ok(clients) => Some(clients[0]),
Err(_) => None,
}
}
}
impl客户端{
pub fn get(名称:String,连接:&PgConnection)->Option{
匹配客户端::表
.filter(客户端::name.eq(&name))
.限额(1)
.load::(连接)
{
Ok(客户端)=>一些(客户端[0]),
Err()=>无,
}
}
}
这给了我以下错误:
.load::(连接){
^^^^没有为'std::option::option'实现特性'diesel::Queryable'`
您的错误消息说您无法将BigInt
(64位int)查询到选项中。这是因为您忘了说id
在您的
table! {
clients {
id -> Nullable<BigInt>,
name -> Text,
rank -> Nullable<BigInt>,
}
}
表格{
客户{
id->可为空,
名称->文本,
秩->可为空,
}
}
您可以看到正在查找的Queryable
的实现。请注意,如果您希望返回一个拥有的客户端而不是引用,而不是您的匹配项,则可以将.ok()和_then(| clients | clients.into _iter().next()写入|
。你在你的表
宏中放了什么?我想问题就在那里。请检查如何创建一个,然后检查你的问题以包含它。例如,我们无法判断模式是什么。尝试在全新的Cargo项目中重现你的错误。还有和。我之所以出现此错误,是因为我使用了相同的结构r插入和选择。这是一种模式,其中默认
字段(即id序列
)定义为选项
,但架构是基于迁移生成的,数据库中的字段不是可选的。每次迁移后我必须手动修改架构(我认为这很好)。