这是Diesel 的一个特征。
trait Identifiable {
type Id;
...
}
这是一个派生 impl 的 User 模型Identifiable
。
#[derive(Identifiable)]
pub struct User {
id: i32,
first_name: String,
last_name: String,
}
根据文档, Identifiable 的实现是在结构的引用上派生的,即 on &User
。这是find
在. 用户的实现如下。id
Identifiable
trait Find<'a>: Sized where
&'a Self: Identifiable,
Self: 'a,
{
fn find(id: <&'a Self as Identifiable>::Id) -> Result<Self, MyError>;
}
Find
on a的含义User
。
impl<'a> Find<'a> for User {
fn find(id: i32) -> Result<User, MyError> {
let conn = ::establish_conn()?;
Ok(users::table.find(id).get_result(&conn)?)
}
}
编译时的错误:
fn find(id: i32) -> Result<Self> {
^^^ expected &i32, found i32
因为我想找到一个用户i32
,所以 impl<&'a Self as Identifiable>::Id
会将 id 称为&i32
. 我只想id
成为一个值而不是引用类型。
当应用于引用类型时,如何将id
on的类型定义find
为值类型?Identifiable
&User