#[derive(Insertable)] 没有为 `std::string::String` 实现

#[derive(Insertable)] is not implemented for `std::string::String`

我收到这个错误:

#[derive(Insertable, Queryable, Identifiable, Debug, PartialEq)]
         ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `std::string::String`

当我尝试编译这个时 struct:

#[derive(Insertable, Queryable, Identifiable, Debug, PartialEq)]
#[table_name = "example_table"]
pub struct SigninLog {
    pub id: i32,
    pub user_group: UserRoleEnum,
    pub created_at: Option<SystemTime>,
    pub optional_data: Option<String>
}

是否因为它包含自定义 enumOption<String>?如果这是问题,我该如何解决?

一般来说,为了能够 #[derive(X)] struct,它的所有成员也必须实现 XInsertable 可能不是这种情况,因为它不是标准特征,但您可能想要验证这一点;在您的情况下,Insertable 未针对 optional_data 中的 String 实施;它是为 Option<T> 实现的,因此包含它的 Option 不是问题。

您可能希望手动实施 Insertable;不过,我还没有使用 diesel - 可能有更简单的方法来做到这一点。