Trait diesel::associations::Identifiable[][src]

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

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.


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

type Id: Hash + Eq[src]

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.

Loading content...

Required methods

fn id(self) -> Self::Id[src]

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.

Loading content...


Loading content...