Archive for: 𔃵月 2018’

Phoenix static file の追加

2018年5月30日 Posted by PURGE

uploads フォルダを、作成してブラウザから参照する場合。
priv/static/files を作成した場合の記述方法。

endpoint.ex

  plug Plug.Static,
       at: "/", from: :sample, gzip: false,
       only: ~w(css fonts images js uploads favicon.ico robots.txt) # 参照名を追記

  plug Plug.Static,
      at: "/uploads", from: "/files" # 参照名と、物理パス名を記述する。

Elixirの Enum.map と Enum.reduce の使いどころ

2018年5月22日 Posted by PURGE

Elixirの Enum.map と Enum.reduce の使いどころを簡単に頭へ入るように簡単な例を示してみる。

■ Enum.map

iex(1)> list = [1,2,3,4,5]
[1,2,3,4,5]

iex(2)> Enum.map(list, fn(x)-> IO.puts x end)
1
2
3
4
5
[:ok, :ok, :ok, :ok, :ok]

次に簡略化して記述してみる。

iex(3)> Enum.map(list, &(IO.puts &1)) 
1
2
3
4
5
[:ok, :ok, :ok, :ok, :ok]

同様の出力結果である。

list を頭に持ってきてみる。

iex(4)> list |> Enum.map(&(IO.puts &1)) 
1
2
3
4
5
[:ok, :ok, :ok, :ok, :ok]

同様の出力結果である。

Phoenix でsession を使用する

2018年5月22日 Posted by PURGE

■ PageController01 セッション設定

  def index(conn, _params) do
    conn = put_session(conn, :msg01, "Hello session 01!!")
    conn = put_session(conn, :msg02, "Hello session 02!!")

    render conn, "index.html"
  end

■ PageController02 セッション取得

  def index(conn, _params) do
    msg01 = get_session(conn, :msg01)
    msg02 = get_session(conn, :msg02)
    render(conn, "index.html", [msg01: msg01, msg02: msg02])
  end

■ index.html.eex セッション格納データ表示

<div>MSG01: <%= @msg01 %></div>
<div>MSG02: <%= @msg02 %></div>

Phoenix association belongs_to

2018年5月21日 Posted by PURGE

■ member.ex

defmodule Sample.Portal.Member do
  use Ecto.Schema
  import Ecto.Changeset


  schema "members" do
    field :birthday, :date
    field :email, :string
    field :first_name, :string
    field :last_name, :string
    field :passwd, :string
    field :gender_cd, :integer
    #    field :team_id, :id
    belongs_to :team, Sample.Portal.Team

    timestamps()

  end

  @doc false
  def changeset(member, attrs) do
    member
    |> cast(attrs, [:last_name, :first_name, :email, :passwd, :birthday, :team_id, :gender_cd])
    |> validate_required([:last_name, :first_name, :email, :passwd, :birthday, :team_id ])
  end
end

■ repo.ex

  def list_members do
    Repo.all(Member)
    |> Repo.preload(:team)
  end

  def get_member!(id), do: Repo.get!(Member, id) |> Repo.preload(:team)

■ index.html.eex

  <%= for member <- @members do %>
    <td><%= member.team.team_name %></td>
  <% end %>

■ show.html.eex

    <%= @member.team.team_name %>

Phoenix select と radio_button

2018年5月21日 Posted by PURGE

■ selectタグの場合

  <div class="form-group">
    <%= label f, :gender, class: "control-label" %>
    <%= select f, :gender_cd, ["男性": "1", "女性": "2", "その他": "0"], class: "control-label" %>
    <%= error_tag f, :team %>
  </div>

■ radio button タグの場合

  <div class="form-group">
    <%= label f, :gender, class: "control-label" %>
    <%= radio_button f, :gender_cd, "1", checked: true, class: "control-label" %>男性
    <%= radio_button f, :gender_cd, "2", class: "control-label" %>女性
    <%= radio_button f, :gender_cd, "0", class: "control-label" %>その他
    <%= error_tag f, :team %>
  </div>

Phoenix date_select フォーマット

2018年5月21日 Posted by PURGE

  <div class="form-group">
    <%= label f, :birthday, class: "control-label" %>
        <%= date_select f, :birthday, default: :calendar.local_time(), builder: fn b -> %>
          <%= b.(:month, [
                  options: [
                    {gettext("1月"), "1"},
                    {gettext("2月"), "2"},
                    {gettext("3月"), "3"},
                    {gettext("4月"), "4"},
                    {gettext("5月"), "5"},
                    {gettext("6月"), "6"},
                    {gettext("7月"), "7"},
                    {gettext("8月"), "8"},
                    {gettext("9月"), "9"},
                    {gettext("10月"), "10"},
                    {gettext("11月"), "11"},
                    {gettext("12月"), "12"},
                  ]
                ]) %>
        <% end %>
    <%= error_tag f, :birthday %>
  </div>

Phoenix date_select 期間とデフォルト(本日日付)の設定方法

2018年5月21日 Posted by PURGE

  <div class="form-group">
    <%= label f, :birthday, class: "control-label" %>
    <%= date_select f, :birthday, default: :calendar.local_time(), year: [options: 1950..2030], class: "form-control" %>
    <%= error_tag f, :birthday %>
  </div>

Phoenix Framwork select tag

2018年5月21日 Posted by PURGE

■member_controller.ex

def new(conn, _params) do
  changeset = Portal.change_member(%Member{})
  teams = Portal.list_teams()
  render(conn, "new.html", changeset: changeset, teams: teams)
end

def edit(conn, %{"id" => id}) do
  member = Portal.get_member!(id)
  teams = Portal.list_teams()
  changeset = Portal.change_member(member)

  render(conn, "edit.html", member: member, changeset: changeset, teams: teams)
end

■new.html.eex / edit.html.eex

<h2>New Member</h2>

<%= render "form.html", Map.put(assigns, :action, member_path(@conn, :create)) %>

<h2>Edit Member</h2>

<%= render "form.html", Map.put(assigns, :action, member_path(@conn, :update, @member)) %>

■form.html.eex

<div class="form-group">
  <%= label f, :teams, class: "control-label" %>
  <%= select f, :team_id, Enum.map(@teams, &{&1.team_name, &1.id}) ,  class: "control-label" %>
  <%= error_tag f, :team %>
</div>

<div class="form-group">
  <%= label f, :gender, class: "control-label" %>
  <%= select f, :gender_id, ["男性": "1", "女性": "2", "その他": "0"], class: "control-label" %>
  <%= error_tag f, :team %>
</div>

PostgreSQL 基本的コマンド

2018年5月17日 Posted by PURGE

■ postgres ユーザでログイン

> psql -U postgres
ユーザー postgres のパスワード:
psql (10.4)
&quot;help&quot; でヘルプを表示します。

■ PostgreSQLのバージョン確認

postgres=# select version();
                          version
------------------------------------------------------------
 PostgreSQL 10.4, compiled by Visual C++ build 1800, 64-bit
(1 行)

■ データベース一覧表示

postgres=# \l
                                             データベース一覧
   名前    |  所有者  | エンコーディング |      照合順序      | Ctype(変換演算子)  |     アクセス権限
-----------+----------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
(3 行)

■ データベース作成

postgres=# create database sample_db;
CREATE DATABASE

■ データベース一覧表示

postgres=# \l
                                             データベース一覧
   名前    |  所有者  | エンコーディング |      照合順序      | Ctype(変換演算子)  |     アクセス権限
-----------+----------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 sample_db | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
(4 行)

■ データベース削除

postgres=# drop database sample_db;
DROP DATABASE
postgres=# \l
                                             データベース一覧
   名前    |  所有者  | エンコーディング |      照合順序      | Ctype(変換演算子)  |     アクセス権限
-----------+----------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
(3 行)

■ データベース作成 with ユーザ

postgres=# create database sample_db owner sample;
ERROR:  ロール"sample"は存在しません
postgres=# create user sample;
CREATE ROLE
postgres=# create database sample_db owner sample;
CREATE DATABASE
postgres=# alter role sample with password 'password';
ALTER ROLE
postgres=# alter role sample with createdb;
ALTER ROLE