Почему я получаю черту, не реализованную для необязательного поля в структуре Diesel - PullRequest
0 голосов
/ 23 октября 2018

У меня есть такая структура:

#[table_name = "clients"]
#[derive(Serialize, Deserialize, Queryable, Insertable, Identifiable, Associations)]
pub struct Client {
    pub id: Option<i64>,
    pub name: String,
    pub rank: Option<i64>,
}

и следующая реализация:

impl Client {
    pub fn get(name: String, connection: &PgConnection) -> Option<Self> {
        match clients::table
            .filter(clients::name.eq(&name))
            .limit(1)
            .load::<Client>(connection)
        {
            Ok(clients) => Some(clients[0]),
            Err(_) => None,
        }
    }
}

, которая дает мне следующую ошибку:

.load::<Client>(connection) {                                                                                   
 ^^^^ the trait `diesel::Queryable<diesel::sql_types::BigInt, _>` is not implemented for `std::option::Option<i64>`

1 Ответ

0 голосов
/ 23 октября 2018

В вашем сообщении об ошибке говорится, что вы не можете запросить BigInt (64-битное целое число) в Option<i64>.Это потому, что вы забыли сказать, что id имеет значение nullable в вашем объявлении таблицы .Он должен выглядеть следующим образом:

table! {
    clients {
        id -> Nullable<BigInt>,
        name -> Text,
        rank -> Nullable<BigInt>,
    }
}

Вы можете увидеть реализацию Queryable, которую вы ищете в документации .

...