首页 > 解决方案 > 在当前范围内没有为 struct `schema::users::columns::roles` 找到名为 `contains` 的方法

问题描述

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

架构.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)

标签: arrayspostgresqlrustrust-diesel

解决方案


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

新架构.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[], 
.
.



推荐阅读