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序列
)定义为
选项
,但架构是基于迁移生成的,数据库中的字段不是可选的。每次迁移后我必须手动修改架构(我认为这很好)。