Buscar..


Añadiendo un Ecto.Repo en un programa de elixir

Esto se puede hacer en 3 pasos:

  1. Debe definir un módulo de elixir que use Ecto.Repo y registre su aplicación como un otp_app.

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. También debe definir alguna configuración para el Repo que le permitirá conectarse a la base de datos. Aquí hay un ejemplo 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. Antes de utilizar Ecto en su aplicación, debe asegurarse de que Ecto se inicie antes de que se inicie su aplicación. Se puede hacer con el registro de Ecto en lib / custom_app.ex como supervisor.

        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
    

"y" cláusula en un Repo.get_by / 3

Si tiene un Ecto.Queryable, llamado Post, que tiene un título y una descripción.

Puede obtener la publicación con el título: "hola" y la descripción: "mundo" ejecutando:

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

Todo esto es posible porque Repo.get_by espera en el segundo argumento una Lista de palabras clave.

Consulta con campos dinámicos.

Para consultar un campo cuyo nombre está contenido en una variable, use la función de campo .

some_field = :id
some_value = 10

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

Agregue tipos de datos personalizados a la migración y al esquema

(De esta respuesta)

El siguiente ejemplo agrega un tipo enumerado a una base de datos de postgres.

Primero, edite el archivo de migración (creado con la 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

Segundo, en el archivo modelo, agregue un campo con un tipo de Elixir:

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

o implementar el comportamiento Ecto.Type .

Un buen ejemplo para este último es el paquete ecto_enum y se puede usar como plantilla. Su uso está bien documentado en su página github .

Este compromiso muestra un ejemplo de uso en un proyecto de Phoenix al agregar enum_ecto al proyecto y usar el tipo enumerado en vistas y modelos.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow