trait Identifiable {
type Id;
...
}
这是一个派生impl为Identifiable
的用户模型。
#[derive(Identifiable)]
pub struct User {
id: i32,
first_name: String,
last_name: String,
}
根据文档,可识别的实现是在结构的引用上导出的,即在&User
上。
这是在find
上定义id
的{{1}}的特征。用户的实现如下。
Identifiable
trait Find<'a>: Sized where
&'a Self: Identifiable,
Self: 'a,
{
fn find(id: <&'a Self as Identifiable>::Id) -> Result<Self, MyError>;
}
上Find
的impl。
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
的用户,因此impl i32
会将ID称为<&'a Self as Identifiable>::Id
。
我只希望&i32
是一个值而不是引用类型。
如果id
应用于引用类型id
,如何将find
上Identifiable
的类型定义为值类型?