问题描述
我是 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[],.
.