Ricerca…


Aggiunta di un Ecto.Repo in un programma di elisir

Questo può essere fatto in 3 passaggi:

  1. Devi definire un modulo elixir che usi Ecto.Repo e registra la tua app come otp_app.

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. È inoltre necessario definire alcune configurazioni per il Repo che consentiranno di connettersi al database. Ecco un esempio con postgres.

    config :custom_app, Repo,
       adapter: Ecto.Adapters.Postgres,
       database: "ecto_custom_dev",
       username: "postgres_dev",
       password: "postgres_dev",
       hostname: "localhost",
      # OR use a URL to connect instead
      url: "postgres://postgres_dev:postgres_dev@localhost/ecto_custom_dev"
    
  3. Prima di utilizzare Ecto nell'applicazione, è necessario assicurarsi che Ecto sia avviato prima dell'avvio dell'app. Può essere fatto con la registrazione di Ecto in lib / custom_app.ex come supervisore.

        def start(_type, _args) do
          import Supervisor.Spec
    
          children = [
           supervisor(Repo, [])
          ]
    
          opts = [strategy: :one_for_one, name: MyApp.Supervisor]
          Supervisor.start_link(children, opts)
        end
    

"e" clausola in un Repo.get_by / 3

Se si dispone di un Ecto.Queryable, denominato Post, che ha un titolo e una descrizione.

Puoi recuperare il post con il titolo: "ciao" e descrizione: "mondo" eseguendo:

 MyRepo.get_by(Post, [title: "hello", description: "world"])

Tutto ciò è possibile perché Repo.get_by si aspetta in secondo argomento un elenco di parole chiave.

Interrogazione con campi dinamici

Per interrogare un campo il cui nome è contenuto in una variabile, utilizzare la funzione campo .

some_field = :id
some_value = 10

from p in Post, where: field(p, ^some_field) == ^some_value

Aggiungi tipi di dati personalizzati alla migrazione e allo schema

(Da questa risposta)

L'esempio seguente aggiunge un tipo enumerato a un database postgres.

Innanzitutto, modifica il file di migrazione (creato con mix ecto.gen.migration ):

def up do
  # creating the enumerated type
  execute("CREATE TYPE post_status AS ENUM ('published', 'editing')")

  # creating a table with the column
  create table(:posts) do
    add :post_status, :post_status, null: false
  end
end

def down do
  drop table(:posts)
  execute("DROP TYPE post_status")
end

In secondo luogo, nel file del modello aggiungi un campo con un tipo di Elisir:

schema "posts" do
  field :post_status, :string
end

o implementare il comportamento di Ecto.Type .

Un buon esempio per quest'ultimo è il pacchetto ecto_enum e può essere usato come modello. Il suo utilizzo è ben documentato sulla sua pagina github .

Questo commit mostra un esempio di utilizzo in un progetto Phoenix aggiungendo enum_ecto al progetto e utilizzando il tipo enumerato nelle viste e nei modelli.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow