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

Posted

技术标签:

【中文标题】在当前范围内没有为 struct `schema::users::columns::roles` 找到名为 `contains` 的方法【英文标题】:no method named `contains` found for struct `schema::users::columns::roles` in the current scope 【发布时间】:2021-05-13 00:44:27 【问题描述】:

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

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)

【问题讨论】:

【参考方案1】:

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

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


【讨论】:

以上是关于在当前范围内没有为 struct `schema::users::columns::roles` 找到名为 `contains` 的方法的主要内容,如果未能解决你的问题,请参考以下文章

<Struct> 没有实现特征 `diesel::Insertable<schema::trd::table>`

如何将 BigQuery Struct Schema 字符串转换为 Javascript 对象?

php怎么判断当前时间在某个时间范围内

golang 如何验证struct字段的数据格式

jquery 判断当前时间是不是在时间范围内

如何在应用程序范围内创建可访问的上下文对象,以便在数据访问中存储当前用户