【Rails】form_withについて
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アクションから渡ってきます。
def new
@user = User.new
end
<%= form_with model: @user do |form| # modelを渡している %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
このときRailsは@userの中身が空であると判断し、
createメソッドを呼び出すことを判断します。
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アクションから渡ってきます。
def edit
@user = User.find(params[:id]) # DBから既存のものを取得
end
<%= form_with model: @user do |form| # modelを渡している %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
このときRailsは@userの中身があると判断し、
updateメソッドを呼び出すことを判断します。
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という機能がRubyをSQLに自動翻訳しています。
この機能により、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】マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
【ネットワーク】中継装置
中継装置とは、
目的の端末までの通信を中継するための装置です。
今日は中継装置の種類について説明していきます。
ネットワークインターフェースカード
ネットワークインターフェースカードとは、
PCなどの端末に内蔵されているLANと接続するための通信装置のことです。
NICと略されたり、ネットワークアダプタとも呼ばれます。
ネットワークインターフェースカードには、
MACアドレスが割り当てられます。
このMACアドレスは全世界で一意なもので、世の中には重複するMACアドレスは存在しません。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からインターネットへ出ていく際の出入り口となることから、デフォルトゲートウェイと呼ばれています。
参考
【Rails】redirect_toとrenderの違いについて
おはようございます☀
今日は、redirect_toとrenderの違いについてまとめていこうと思います。
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わかりやすいプログラミング用語サイト
【ネットワーク】端末情報
ネットワーク上にあるPCやサーバーなどのコンピュータには、
端末情報が割り当てられています。
❏ MACアドレス
MACアドレスとは、Media Access Control addressの略で、
端末の通信規約を特定する情報です。
ハードウェア(通信装置(有線 / 無線))に振り当てられており、
世界中で一意な番号が割り当てられています。
MACアドレスが重複することはありません。
16進数、48ビットで表します。(例:01-23-45-67-89-AB)
❏ IPアドレス
ネットワークの端末を特定する情報です。
インターネット上で一意なアドレスとなっています。
インターネット上で通信相手を間違わないようにするために使用されます。
インターネット上で住所のような役割を担っています🏠
IPv4は、IPの第4版で、
1990年代の後半から広く使われ、現在も引き続き使用されています。
次世代のプロトコルとして注目されています。
表し方は、
IPv4は、10進数、32ビットで表すのに対し、
IPv6は、16進数、128ビットで表します。
❏ ポート番号
端末で動作しているアプリケーションを特定する番号です。
Webサーバーの場合は80となっています。
グローバルIPアドレスとプライベートIPアドレス
グルーバルIPアドレスとは、
インターネットに接続するネットワーク機器が使用できるIPアドレスです。
インターネット上で通信を行うにはグローバルIPアドレスが必要になってきます。
プライベートIPアドレスとは、
組織内のネットワーク(プライベートネットワーク)でのみ使用できるIPアドレスです。
会社内のネットワークや家庭用のネットワークでは通常、
プライベートIPアドレスが使用されています。
インターネット上では使用することが出来ません。
NAT
NATとは、Network Address Translationの略で、
IPアドレスを変換する技術とされています。
プライベートIPアドレスをグローバルIPアドレスに変換する技術とされています。
参考
IPv6・IPv4とは? IPoE・PPPoEとは? その違いを解説 | DTI
IPアドレスとは?をわかりやすく解説します | カゴヤのサーバー研究室
【SQL】SELECT文
SELECT文では、
様々な条件を付加することで、データを柔軟に取り出すことが出来ます。
SELECT文の基本
SELECT文の基本は、
「どのような条件で」
「どの表から」
「どの列を取り出すか」
です。
条件を指定することにより、
データベースから様々なデータを取り出すことが出来ます。
❏ SELECT文の構成
例えば、
以下のような商品表があるとします。
じゃあSELECT文の基本に合わせて
データを実際に取り出してみましょう!
「どのような条件で」→単価が300円以上のもの!
「どの表から」→商品表から!
「どの列を取り出すか」→商品名と単価
これでやってみます。
そうするとこうなります。
求めているデータを取り出すことに成功しました!
SELECT文で表してみると、
SELECT 商品名、単価
FROM 商品表
WHERE 単価>= 300
となります。
もっと詳しくSELECT文について解説していきます。
射影
射影は表の中から特定の列を取り出す関係演算です。
射影を行うには以下のように指定します。
SELECT 商品名 FROM 商品表
選択
選択は表の中から特定の行を取り出す関係演算です。
WHERECT句を使って、取り出したい行の条件を指定します。
SELECT * FROM 商品表 WHERE 単価< 95
論理演算子
複数の条件を組み合わせて抽出する場合な論理演算子を用います。
論理演算子には
AND
OR
NOT
があります。
結合
最後に、
表と表とを結合させる演算子、「結合」です。
以下のように記述します。
SELECT *
FROM 受注表,顧客表
WHERE 受注表.顧客コード=顧客表.顧客コード
FROM句の中にくっつけたい表の名前を羅列して、
WHERE句で「どの列を使ってくっつけるか」の指定をします。
WHERE 受注表.顧客コード=顧客表.顧客コード
の部分の、受注表.顧客コードのような表記は、
「表名.列名」となっています。
表名の列名の間にある「. 」は所属を荒らしており、どの表に属する列であるかということを表現するために用いられています。
【Rails】RESTfulとは
おはようございます。
今日は「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 ルーティングの基礎とRESTful - Qiita
ひとりごと
優雅な紅茶の写真をみると優雅な気分になれますね😌