Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】form_withについて

f:id:kina_kq:20210425125010j:plain

 

forma_withとは、

railsで情報を送信するためのヘルパーメソッドです。

 form_withにより、簡単にHTMLを作成することができます。

 

form_withの使い方

ビューファイル (データベースに保存しない時)

<%= form_with url: "users_path" do |form| %>
   <%= form.text_field :email %> 
<%= form.submit %> <% end %>

ビューファイル(データベースに保存する時)

<%= form_with model: @user do |form| %>
    <%= form.text_field :email %> 
  <%= form.submit %> <% end %>

 

データベースに保存する時、form_withの引数には

モデルクラスのインスタンスを指定します。

 

 form_withは渡されたものによって、

行うHTTPメソッドとアクションをそれぞれ判断します。

 

form_with url:url_path

 

<%= form_with url: "users_path" do |form| %>
   <%= form.text_field :email %> 
<%= form.submit %> <% end %>

 

pathに対してPOSTメソッドを行うので、

この例だと、users_pathに対してPOSTを行い、

params[:email]のような形でtext_fieldに入力された値を取得します。

 

form_with model: @model

 

モデルに入っているものに対して、2パターンの処理があります。

 

パターン1:新しく作られたものの場合

パターン2:既存のものを呼び出した場合

 

❏ パターン1(モデルに入っているのものが新しく作られたものの場合)

newアクションから渡ってきます。

app/controllers/users_controller.rb
 
def new
  @user = User.new
end
app/views/users/new.html.erb
 
<%= form_with model: @user do |form| # modelを渡している %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

 

このときRails@userの中身が空であると判断し、

createメソッドを呼び出すことを判断します。

 

app/controllers/users_controller.rb
 
def create
  User.create(user_params)
end

private
  # ストロングパラメータ
  def user_params
    paramas.requie(:user).permit(:email)
  end

paramas.requie(:user).permit(:email)

の部分には注意です。

require(:user)のように一度userを呼んでいます。

 

 

 ❏ パターン2(既存のものを呼び出した場合) 

editアクションから渡ってきます。

app/controllers/users_controller.rb
 
def edit
  @user = User.find(params[:id]) # DBから既存のものを取得
end
app/views/users/edit.html.erb
 
<%= form_with model: @user do |form| # modelを渡している %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

 

このときRails@userの中身があると判断し、

updateメソッドを呼び出すことを判断します。

 

app/controllers/users_controller.rb
 
def update
  User.find(params[:id]).update(user_params)
end

private
# ストロングパラメータ
def user_params
paramas.requie(:user).permit(:email)
end

 

超ざっくりしたまとめ

中身がある場合はupdate

中身がない場合はcreate

 

参考

【Rails】form_withの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

【Rails】form_with/form_forについて【入門】 - Qiita

 

 

【Rails】マイグレーション

緑, ミント, 茶

 

今日はマイグレーションについて調べたものをまとめていきます。

 

マイグレーションとは 

 

マイグレーション(migration)は、

Active Recordの機能の1つです。

 

通常テーブルを操作したい場合は、SQLを書かなればいけませんが、

マイグレーションにはSQLを書くことなく、Rubyのデータベース内にテーブル作成することが出来る」機能を持っています。

 

 SQLを書く必要がない理由

 

ActiveRecordという機能がRubySQLに自動翻訳しています。

この機能により、Rubyが記載された所定のファイルを使い翻訳処理を経由してSQLでデータベース操作が可能です。

 

SQLに翻訳される元となるRubyで記載された命令文を、マイグレーションファイルというものに記載します。

 

マイグレーションファイルとは

 

マイグレーションファイルとは、データベースの設計図です。

このファイルを実行すると、記述した内容がデータベースに反映されます。

 

❏ 実行の仕方
$rails db:migrate

 

このコマンドは、

マイグレーションファイルを実行し、データベースに反映させるためのコマンドです。

 

❏ schema_migrationsテーブル

 

これは、migrateが実行されると自動でデータベースに作成されるテーブルです。

マイグレーションファイルのバージョンがこのテーブルにどんどん保存されていきます。

 

マイグレーションファイルは`20XXXXXXXXXXXX_hoge_hoge.rb`のような名前で作成されます。

`20XXXXXXXXXXXX`の部分には日時の情報が自動的に入り、この部分がバージョンを表します。

 

マイグレーションファイルの状態確認

$ rails db:migrate:status

 

scheme_migrationsテーブルにversionがあればup、なければdownと表示されます。

 

< 間違えてカラムを作成してしまったとき>

$ rails db:rollback

 

このコマンドを実行すると、最新のマイグレーションファイルのバージョンがscheme_migrationsテーブルから削除されます。

 

upからdownになったことを確認したあと、マイグレーションファイルを修正し、再度

rails db:migrateコマンドを実行します。 

 

複数のマイグレーションファイルをrollbackさせたいときには、以下のように記述します。

$ rails db:rollback STEP=3

 

<rollbackする際の注意点>

 

マイグレーションファイルを削除するときは注意が必要です。

マイグレーションファイルはデータベースを作成した歴史であり、実行されているマイグレーションファイルは絶対に編集したり削除したりしてはいけません。

(私は何もわかっていないまま編集&削除して、大変な思いをしました笑)

 

エラーのパレード状態になります。

 

<間違って削除してしまったときは>

一旦、rails db:migrate:statusコマンドでマイグレーションファイルの状態を確認します。おそらく、NO FILEと表示されます。

 

なぜNO FILEと表示されるかというと、

schema_migrationsテーブルにバージョンが保存されているためです。

 

 なので、schema_migrationsテーブルから削除してしまったマイグレーションファイルのレコードを削除すれば、NO FILEの表示は消えます。

 

スキーマファイル

 

マイグレーションが実行されると、dbフォルダにschema.rbというファイルが作成されます。これをスキーマファイルといいます。

 

スキーマファイルにはschema_migrationsテーブルの最後のレコードのversionが記録されます。

 

 

参考

Active Record マイグレーション - Railsガイド

DIVE INTO CODE | Railsにおけるマイグレーションとは

Rails初心者がつまずきやすい「マイグレーション」

【Rails】マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

【ネットワーク】中継装置

f:id:kina_kq:20210423081716j:plain

 

中継装置とは、

目的の端末までの通信を中継するための装置です。

 

今日は中継装置の種類について説明していきます。

 

ネットワークインターフェースカード

 

 ネットワークカード - Wikipedia

 

ネットワークインターフェースカードとは、

PCなどの端末に内蔵されているLANと接続するための通信装置のことです。

NICと略されたり、ネットワークアダプタとも呼ばれます。

 

ネットワークインターフェースカードには、

MACアドレスが割り当てられます。

 

このMACアドレスは全世界で一意なもので、世の中には重複するMACアドレスは存在しません。LANで接続される機器には必ずつけるようになっています。

 

 ハブ、リピータ

 Ethernet LAN - リピータ・リピータハブ・ブリッジ・スイッチ・ルータ

 

画像出典「https://wa3.i-3-i.info/word1954.htmhttps://www.infraexpert.com/study/ethernet6.html

 

ハブ、リピータとは、

電気信号を中継するための装置です。

 

スター★型のネットワークでケーブルにつながっている端末のすべてにデータが流れるのが特徴です。

 

上の写真でいうとm元締めの機械が「ハブ」にあたります。

 

すべてに送信すると無駄な通信が発生することから、ハブやリピータが利用される場面は少なくなってきています。

 

ブリッジ、L2スイッチ(Layer 2スイッチ)

 

LAN内の端末にデータを送信するための装置です。

流れてきたパケットの「MACアドレス」を確認し、必要があれば他のセグメントへパケットを流す役割を持ちます。

 

Layerは改装の意味で、

L1は電気信号、

L2はMACアドレス

L3はIPアドレス

での制御を行います。

 

ルータとL3スイッチ(Layer3スイッチ)

 

LANとインターネットの間などでデータを転送するための装置です。

データの中の宛先(IPアドレス)を識別して転送します。

 

ルータはソフトウェアを使って中継するために柔軟なルールを設定することができ、L3スイッチはハードウェアで中継するため高度な中継をすることが出来ます。

 

ルータはデータがLANからインターネットへ出ていく際の出入り口となることから、デフォルトゲートウェイと呼ばれています。

 

参考 

ネットワークインターフェースカード | 基本情報技術者試験 無料ビデオ

ハブとは IT用語辞典

ブリッジとは | 分かりやすく図解で解説 - ITを分かりやすく解説

【Rails】redirect_toとrenderの違いについて

f:id:kina_kq:20210422080753j:plain

 

おはようございます☀

今日は、redirect_torenderの違いについてまとめていこうと思います。

 

 redirect_toとrenderの違い

 

・render     : controller → view
・redirect_to   : controller → URL → route → controller → view

 

renderはいきなりviewに飛ぶのに対し、

redirect_toの方が寄り道が多いことがわかると思います。

  

renderは、

アクションを実行せずにビューファイルを表示させるのに対し、

redirect_toは、

1回指定したアクションを実行してそのアクションに対応したビューを表示させます。

 

redirect_toとは

 

 redirect_toは、

指定したURLに遷移させることができるメソッドです。

 

redirect_toメソッドを使うと、決められたコントローラーのアクション以外のアクションなどを実行させ、選択したビューファイルを表示させることができます。

 

 redirect_toメソッドのリダイレクト先の指定

 

パターン1:URLで指定する

redirect_to "https://www.pokemon.co.jp/"

 

パターン2:アクションで指定

redirect_to action: :new

 

パターン3:指定したコントローラのアクションで指定

redirect_to  controller: :users, action: :show

 

パターン4:アクションの個別のリソースを指定

redirect_to  controller: :users, action: :show, id: 1

 

パターン5:前のページを指定

redirect_to :back

 

 などがあります。

その他にもステータスコードを指定してリダイレクトをさせることも可能です。

 

renderとは

 

renderは、

Action内で、呼び出すViewを指定するメソッドです。

Action内でインスタンス変数として格納されたものは、viewから呼び出せます。

 

 

使い分け

 

データを追加、更新、削除を行う時 →「redirect_to」
データの取得を行う時 →「render」

 

controllerの処理が必要だー!といったものに対しては、

redirect_toを使い、

 

失敗したらエラー表示させるだけでよいよーといったものに対しては、

renderを使うといった感じです。

 

参考

 

【Rails】renderとredirect_toの違いと使い分け - Qiita

【Rails】redirect_toとrenderの使い分け - Qiita

renderとredirect_toの違いを整理 【Day 1/30 2nd】|K.Tawara|note

【Rails】redirect_toの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

 

【ネットワーク】端末情報

 f:id:kina_kq:20210421073825j:plain

 

ネットワーク上にあるPCやサーバーなどのコンピュータには、

端末情報が割り当てられています。

 

MACアドレス

 

MACアドレスとは、Media Access Control addressの略で、

端末の通信規約を特定する情報です。

 

ハードウェア(通信装置(有線 / 無線))に振り当てられており、

世界中で一意な番号が割り当てられています。

MACアドレスが重複することはありません。

 

16進数48ビットで表します。(例:01-23-45-67-89-AB)

 

IPアドレス

 

ネットワークの端末を特定する情報です。

インターネット上で一意なアドレスとなっています。

 

インターネット上で通信相手を間違わないようにするために使用されます。

インターネット上で住所のような役割を担っています🏠

 

IPv4IPv6があり、

IPv4は、IPの第4版で、

1990年代の後半から広く使われ、現在も引き続き使用されています。

 

IPv6IPv4の進化形で、

次世代のプロトコルとして注目されています。

 

表し方は、

IPv4は、10進数32ビットで表すのに対し、

IPv6は、16進数128ビットで表します。

 

 

❏ ポート番号

 

端末で動作しているアプリケーションを特定する番号です。

 Webサーバーの場合は80となっています。

 

グローバルIPアドレスとプライベートIPアドレス

 

グルーバルIPアドレスとは、

インターネットに接続するネットワーク機器が使用できるIPアドレスです。

インターネット上で通信を行うにはグローバルIPアドレスが必要になってきます。

 

プライベートIPアドレスとは、

組織内のネットワーク(プライベートネットワーク)でのみ使用できるIPアドレスです。

会社内のネットワークや家庭用のネットワークでは通常、

プライベートIPアドレスが使用されています。

 

インターネット上では使用することが出来ません。

 

NAT

 

NATとは、Network Address Translationの略で、

IPアドレスを変換する技術とされています。

 

プライベートIPアドレスグローバルIPアドレスに変換する技術とされています。

 

参考 

MACアドレスとは?

IPv6・IPv4とは? IPoE・PPPoEとは? その違いを解説 | DTI

IPアドレスとは?をわかりやすく解説します | カゴヤのサーバー研究室

グローバルIPアドレスとプライベートIPアドレスって? | IT情報メディア「LIVRA」

NAT( Network Address Translation )とは

【SQL】SELECT文

f:id:kina_kq:20210419082652j:plain

 

SELECT文では、

様々な条件を付加することで、データを柔軟に取り出すことが出来ます。

 

SELECT文の基本

 

SELECT文の基本は、

「どのような条件で」

「どの表から」

「どの列を取り出すか」

です。

 

条件を指定することにより、

データベースから様々なデータを取り出すことが出来ます。

 

❏ SELECT文の構成

f:id:kina_kq:20210419083759j:plain

 

例えば、

以下のような商品表があるとします。

 

f:id:kina_kq:20210419084452p:plain

 

じゃあSELECT文の基本に合わせて

データを実際に取り出してみましょう!

 

「どのような条件で」→単価が300円以上のもの!

「どの表から」→商品表から!

「どの列を取り出すか」→商品名と単価

 

これでやってみます。

 

そうするとこうなります。

f:id:kina_kq:20210419084633p:plain

求めているデータを取り出すことに成功しました!

 

 

 SELECT文で表してみると、

SELECT 商品名、単価 

FROM 商品表

WHERE 単価>= 300

となります。

 

 

もっと詳しくSELECT文について解説していきます。

 

射影

 

射影は表の中から特定の列を取り出す関係演算です。

射影を行うには以下のように指定します。

 

SELECT 商品名 FROM 商品表

f:id:kina_kq:20210419090121j:plain

 

選択

 

選択は表の中から特定の行を取り出す関係演算です。

WHERECT句を使って、取り出したい行の条件を指定します。

 

SELECT * FROM 商品表 WHERE 単価< 95

f:id:kina_kq:20210419090844j:plain

 

 

論理演算子

 

複数の条件を組み合わせて抽出する場合な論理演算子を用います。

 

論理演算子には

AND

OR

NOT 

があります。

 

結合

 

 最後に、

表と表とを結合させる演算子「結合」です。

以下のように記述します。

 

SELECT * 

FROM 受注表,顧客表

WHERE 受注表.顧客コード=顧客表.顧客コード

 

 

FROM句の中にくっつけたい表の名前を羅列して、

WHERE句で「どの列を使ってくっつけるか」の指定をします。

 

f:id:kina_kq:20210419092940j:plain

 

WHERE 受注表.顧客コード=顧客表.顧客コード

の部分の、受注表.顧客コードのような表記は、

「表名.列名」となっています。

 

表名の列名の間にある「. 」は所属を荒らしており、どの表に属する列であるかということを表現するために用いられています。

【Rails】RESTfulとは

f:id:kina_kq:20210418091736j:plain

 

おはようございます。

今日は「RESTful」とは何なのか、それがRailsにどう関与しているか

についてまとめていきます。

 

RESTfulとは

 

RESTfulとは

REST(REpresentational State Transfer)という設計原則に従うシステムのことを指す形容詞です。

 

もう少し分かりやすく言い換えると、RESTとは、

Webの仕組みを利用してWebサービスを提供できるようにするための設計思想(制約)の集まりを指します。

 

 

RESTの設計思想は以下のようになっています。

1.HTTPリクエストはそのリクエストで必要な情報を全て持ち、前のリクエストからの状態が保存されている必要がない(ステートレス)

2.個々の情報(リソース)への「操作」の表現がHTTPメソッドとして統一されている

3.個々の情報(リソース)がそれぞれ一意なURIで表されている

4.ある情報(リソース)から別の情報を参照したい時にはリンクを利用する

 

これらの原則に従って作成されたシステムやAPIのことを

”RESTfulなシステム""RESTfulなAPIと呼びます。

 

Railsは、「RESTful」なシステムを利用し、開発しやすくする機能を提供しています。(例:URLが表す情報のことをリソースと呼ぶなど)

 

 

RESTfulなインターフェースにするメリット

 

なんといっても美しいインターフェースを実現できることです。

他にも、

Railsのレールに乗れる

・URLやHTTPメソッドを何にするかを悩む時間を節約出来る

・URLやHTTPメソッドを何にするかを悩む時間を節約できる

・他の開発者が設計を理解しやすくなる

潜在的に外部のシステムと連携がしやすくなる

など色々な利点が存在します。

 

参考

 

Rails のルーティング - Railsガイド

Rails ルーティングの基礎とRESTful - Qiita

RESTfulって・・・?調べたメモ | めもめも

 

ひとりごと

優雅な紅茶の写真をみると優雅な気分になれますね😌