15
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2023

Day 11

ベイビーステップで学ぶマップリストの値の操作① -Ectoスキーマからパターンマッチを使用してパラメータを取り出す

Last updated at Posted at 2023-11-11

こんにちは!
プログラミング未経験文系出身、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
/lib/nov11_web/router.ex
 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件登録しました。
image.png

この画面上に表示されている1件のデータのnameの値を取り出したいです。

:nameの値を取り出す

Ectoスキーマからデータを取り出して変数userにバインドする

【iex上で実行】
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上で実行】
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上で実行】
iex()> name
"hogehoge"

取り出せました(^▽^)/

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2

  1. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  2. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

15
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?