在当前范围内没有为 struct `schema::users::columns::roles` 找到名为 `contains` 的方法

问题描述

我是 Rust 的新手,正在尝试创建一个示例 webapi。我正在使用 postgres 并有一个名为“roles”的列作为数组类型。我想使用来自diesel::expression_methods::PgArrayExpressionMethods 的contains 方法,但有一个错误提示“在当前范围内没有为struct contains 找到名为schema::users::columns::roles方法

schema.rs

table! {
    users (id) {
        id -> Uuid,username -> Varchar,email -> Varchar,password -> Varchar,first_name -> Nullable<Varchar>,last_name -> Nullable<Varchar>,active -> Bool,roles -> Nullable<Array<Text>>,created_at -> Timestamp,updated_at -> Timestamp,}
}

在处理程序方法中:

users.filter(roles.contains(vec!["admin"])).get_results::<User>(&conn)

解决方法

就在我写这个问题的时候,我发现了问题所在。它不适用于 nullable 数组列。我已经使用默认的空数组重新进行了迁移,现在它可以工作了 :)

新的 schema.rs

table! {
    users (id) {
        id -> Uuid,username -> Varchar,email -> Varchar,password -> Varchar,first_name -> Nullable<Varchar>,last_name -> Nullable<Varchar>,active -> Bool,roles -> Array<Text>,created_at -> Timestamp,updated_at -> Timestamp,}
}

新迁移/.../up.sql

.
.
  roles text [] not null default array[]::text[],.
.