Szukaj…


Dodanie Ecto.Repo w programie eliksiru

Można to zrobić w 3 krokach:

  1. Musisz zdefiniować moduł eliksiru, który używa Ecto.Repo i zarejestrować swoją aplikację jako otp_app.

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. Musisz także zdefiniować konfigurację dla Repo, która pozwoli ci połączyć się z bazą danych. Oto przykład z 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. Przed użyciem Ecto w aplikacji musisz upewnić się, że Ecto zostało uruchomione przed uruchomieniem aplikacji. Można tego dokonać rejestrując Ecto w lib / custom_app.ex jako przełożony.

        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
    

”i” w Repo.get_by / 3

Jeśli masz Ecto.Queryable, o nazwie Post, który ma tytuł i opis.

Możesz pobrać post z tytułem: „cześć” i opisem: „świat”, wykonując:

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

Wszystko to jest możliwe, ponieważ Repo.get_by oczekuje w drugim argumencie listy słów kluczowych.

Zapytania za pomocą pól dynamicznych

Aby wysłać zapytanie do pola o nazwie zawartej w zmiennej, użyj funkcji pola .

some_field = :id
some_value = 10

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

Dodaj niestandardowe typy danych do migracji i schematu

(Z tej odpowiedzi)

Poniższy przykład dodaje wyliczony typ do bazy danych Postgres.

Najpierw edytuj plik migracji (utworzony za pomocą 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

Po drugie, w pliku modelu dodaj pole o typie eliksiru:

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

lub zaimplementuj zachowanie Ecto.Type .

Dobrym przykładem tego drugiego jest pakiet ecto_enum , który można wykorzystać jako szablon. Jego użycie jest dobrze udokumentowane na stronie github .

To zatwierdzenie pokazuje przykładowe użycie w projekcie Phoenix od dodania enum_ecto do projektu i użycia wyliczonego typu w widokach i modelach.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow