2017-01-19 3 views
0

Ich habe ein Ecto-Modell, das ich in der Datenbank mit einer benutzerdefinierten binary_id gespeichert werden soll, die von einer Elixierfunktion generiert wird. Ist das möglich?Ecto: Benutzerdefinierte binary_id

Meine ID-Funktion sieht wie folgt aus:

def gen_id 
    String.upcase to_string Enum.take_random('abcdefghjkmnpqrstuvwxyz123456789', 8) 
end 

Mein Schema wie folgt aussieht:

schema "orders" do 
    belongs_to :type, Invoicer.Customer 
    @primary_key {:id, :binary_id, autogenerate: true} 
    field :order_details, :string 

    timestamps() 
end 

Antwort

1

Sie sollten Ihre eigene Art nach dem Ecto.Type Verhalten implementieren.

Innerhalb dieses Typs können Sie eine autogenerate/0-Funktion hinzufügen, die Ihre gen_id-Funktion ist, um die ID für Sie zu generieren.

Um ein vollständiges Beispiel von so etwas zu sehen, können Sie sich ansehen Ecto.UUID, die alles hat, was Sie hier verlangen.