こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はEctoスキーマからパターンマッチを使用してパラメータを取り出す方法について学んだことをまとめます。
目次
1.Ectoスキーマからパターンマッチを使用してパラメータを取り出す(本記事)
2.Ectoスキーマからパラメータを取り出して更新する(iex内のみ)
3.Enum.mapの紹介
4.Enum.filterの紹介
5.String.contains?の紹介
6.Enum.intoの紹介
7.Map.putの紹介
8.(番外編)元データがマップ→リスト→マップのもう一段深い入れ子構造だったらどうするか?(Map.getの紹介)
目的
リストの要素がマップ(あるいはその逆)になっている場合に値を取り出して操作できるようになりたい。
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.14.3
Erlang v26.0.2
Phoenix v1.7.10
今回やりたいこと
Ectoスキーマからパラメータを取り出したい
今回やったこと
Ectoスキーマの作成
mix phx.gen.live
でEctoスキーマを作ってもらいます。
mix phx.new nov11
cd nov11
mix phx.gen.live Users User users name:string age:integer
scope "/", Nov11Web do
pipe_through :browser
+ live "/users", UserLive.Index, :index
+ live "/users/new", UserLive.Index, :new
+ live "/users/:id/edit", UserLive.Index, :edit
+ live "/users/:id", UserLive.Show, :show
+ live "/users/:id/show/edit", UserLive.Show, :edit
get "/", PageController, :home
end
mix ecto.migrate
データを投入してみる
iex -S mix phx.server
この画面上に表示されている1件のデータのnameの値を取り出したいです。
:nameの値を取り出す
Ectoスキーマからデータを取り出して変数userにバインドする
iex()> user = Nov11.Users.get_user!(1)
[debug] QUERY OK source="users" db=1.4ms idle=1150.7ms
SELECT u0."id", u0."name", u0."age", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."id" = $1) [1]
↳ :erl_eval.do_apply/7, at: erl_eval.erl:746
%Nov11.Users.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
name: "hogehoge",
age: 10,
inserted_at: ~U[2023-11-11 14:34:43Z],
updated_at: ~U[2023-11-11 14:34:43Z]
}
パターンマッチを使用して変数nameに:nameの値をバインドする
iex()> %{name: name} = user
%Nov11.Users.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
name: "hogehoge",
age: 10,
inserted_at: ~U[2023-11-11 14:34:43Z],
updated_at: ~U[2023-11-11 14:34:43Z]
}
値を取り出す
iex()> name
"hogehoge"
取り出せました(^▽^)/
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩