pub trait Identifiable: HasTable {
    type Id: Hash + Eq;
    fn id(self) -> Self::Id;
}
Expand description

This trait indicates that a struct represents a single row in a database table.

This must be implemented to use associations. Additionally, implementing this trait allows you to pass your struct to update (update(&your_struct) is equivalent to update(YourStruct::table().find(&your_struct.primary_key())).

This trait is usually implemented on a reference to a struct, not the struct itself.

Deriving

This trait can be automatically derived by adding #[derive(Identifiable)] to your struct. By default, the “id” field is assumed to be a single field called id. If it’s not, you can put #[primary_key(your_id)] on your struct. If you have a composite primary key, the syntax is #[primary_key(id1, id2)].

By default, #[derive(Identifiable)] will assume that your table name is the plural form of your struct name. Diesel uses very simple pluralization rules. It only adds an s to the end, and converts CamelCase to snake_case. If your table name does not follow this convention or the plural form isn’t just an s, you can specify the table name with #[table_name = "some_table_name"]. Our rules for inferring table names is considered public API. It will never change without a major version bump.

Associated Types

The type of this struct’s identifier.

For single-field primary keys, this is typically &'a i32, or &'a String For composite primary keys, this is typically (&'a i32, &'a i32) or (&'a String, &'a String), etc.

Required methods

Returns the identifier for this record.

This takes self by value, not reference. This is because composite primary keys are typically stored as multiple fields. We could not return &(String, String) if each string is a separate field.

Because of Rust’s rules about specifying lifetimes, this means that Identifiable is usually implemented on references so that we have a lifetime to use for Id.

Implementors