我有这个结构:
#[derive(Identifiable, Queryable, Debug)]
#[table_name = "users"]
pub struct QueryableUser {
pub id: i32,
pub username: String,
pub password: String,
pub sex: bool,
pub profile: Option<String>,
pub birth: chrono::NaiveDate,
}
当我尝试像这样更新结构时:
diesel::update(&queryable_user).set(...);
它给了我这个错误:
error[E0277]: the trait bound `user::QueryableUser: diesel::Identifiable` is not satisfied
--> src\message_handler\set_profile.rs:36:13
|
36 | diesel::update(user).set(profile.eq(None));
| ^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `user::QueryableUser`
|
= help: the following implementations were found:
<&'ident user::QueryableUser as diesel::Identifiable>
= note: required because of the requirements on the impl of `diesel::query_builder::IntoUpdateTarget` for `user::QueryableUser`
= note: required by `diesel::update`
这真的很令人困惑,因为我在我的结构上使用了#[derive(Identifying)]
。
最佳答案
来自 Identifiable
的文档:
This must be implemented to use associations. Additionally, implementing this trait allows you to pass your struct to update (
update(&your_struct)
is equivalent toupdate(YourStruct::table().find(&your_struct.primary_key())
).This trait is usually implemented on a reference to a struct, not the struct itself.
所以你只需要借用用户
:
diesel::update(&user).set(...);
关于postgresql - 如何使用 Diesel 更新现有对象? "` T : Identifiable` is not satisfied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57747246/