Elixir Language
Ekto
Szukaj…
Dodanie Ecto.Repo w programie eliksiru
Można to zrobić w 3 krokach:
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
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"
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
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.