STUDY MEMO

学習のメモ書き

<Ruby on Rails> レイアウトをサイト全体に反映させる

views/layouts/application.html.erbファイルに、サイト全体に適応させたいレイアウトをheadタグやbodyタグに入力すると、全体に情報が反映される。
下記はbody欄に全体に適応させたい情報がある場合のコード。

<!DOCTYPE html>
<html>
  <head>
  </head>

  <body>
      #反映させたい情報
      <%= yield %> 
  </body>

</html>


<%= yield %> 部分に各htmlファイルが代入される形になるので、
全てのhtmlがapplication.html.erbの一部となるということ。


<Ruby on Rails> rails consoleでの操作

rails console

ターミナル上で下記のコマンドを入力するとコンソールを起動することができる。

rails console


コンソールを起動した状態にすると、
コンソール上で四則演算やtextの代入などの操作ができるようになる。
コンソールを閉じるときは下記コマンドを使用。

quit



テーブルにデータを追加

テーブルにデータ追加をするとき、
下記のような流れで行われる。

Image from Gyazo



①newメソッドでモデルのインスタンスを生成

rails consoleで下記コマンドを入力。

変数名 = モデル名.new(カラム名:入力内容)



②テーブルにインスタンスのデータを保存

rails consoleで下記コマンドを入力。

モデル名.save



テーブルから最初のデータを取り出す

下記コマンドでテーブルの最初にあるデータを選択し、
指定カラムのデータを取り出すことができる。

変数名 = モデル名.first
変数名.カラム名



DBの全てのデータを取得する

rails consoleで下記のコマンドを入力することで変数に一覧を代入できる。

変数名 = モデル名.all


DBのレコードを指定したいときは、下記のコマンドを使用する。
また、iに0を入れると1番目のデータを、1を入れると2番目のデータを出力できる。
カラム名を入れるとそのカラムのデータだけ出力できる。

変数名.all[i].カラム名

<Ruby on Rails> テーブル作成

マイグレーションファイルの作成

マイグレーションファイルとは、データベースに変更を指示するためのファイル。
保存場所はdb/migrateの直下。
下記コマンドで作成できる。
データ型にはtext(長い文字列)などのデータ型が入る。

rails g model モデル名 カラム名:データ型


このとき同時にmodelが自動作成され、
modelsフォルダに、モデル名.rbファイルが生成される。
モデルとは、データベースを操作する特殊なクラスのことで、
ApplicationRecordを継承するクラスを指す。
初期値には下記のようなコードが記載されている。

class モデル名 < ApplicationRecord

end


データベースのカラム自動作成

下記コマンドで、マイグレーションファイルに定義されているカラムをデータベースに自動生成できる。
マイグレーションファイル生成時にid、created_at、updated_atは自動で記載される。

rails db:migrate



<Ruby on Rails> each文を記載

html内に記載する場合

headerタグの直下に配列を入力する。

<% 配列名 = [
 "文字列1",
    "文字列2"
    ]  
%>

配列を表示したい部分に下記のコードを入れる。

<% 配列名.each do |変数名| %>
<%= 変数名 %>
<% end %>



controller内に記載する場合

controller内にあるactionの中に下記のようにコードを記載。
変数名の前に@を記載することでviewでも使用できるようになる。

def action名
 @配列名 = [
 "文字列1",
    "文字列2"
    ]  
end

html内のcontrollerで設定した配列を表示したい部分に、下記のコードを入れる。

<% @配列名.each do |変数名| %>
<%= 変数名 %>
<% end %>

<Ruby on Rails> 開発準備

開発準備


開発に必要なフォルダやファイルの入った、フォルダを作成する。

rails new アプリケーション名


開発中のアプリケーションをブラウザで表示するにはサーバーを起動する必要がある。
下記コマンドを入力すると、サーバーが起動され、ブラウザでlocalhost:3000というURLにアクセスすると初期画面が表示される。

rails server



トップページの自動生成


新規webページを作成するためのコマンド。
新しいwebページが自動で作られ、localhost:3000/フォルダ名/ファイル名というURLにアクセスできるようになる。

rails generate controller フォルダ名 ファイル名



<Ruby on Rails> 画像保存場所

publicフォルダに入れておくと、htmlでは

<img src="/画像名">

CSSでは

background-image: url("/画像名");

のように画像を指定することで簡単に表示できる。
※画像名の前に必ず/(スラッシュ)を入れる。

<Ruby on Rails> view、controller、routing

Railsでページを表示するには以下の3つのファイルが必要。

view

ページの見た目を作るためのhtmlファイル。
ファイル→ファイル名.html.erb

viewでリンクを設定

以下のコードをhtml.erbのリンクにしたい部分に記載。

<a href = "/routingで設定したURL">文字列</a>


controller

ページを表示するとき、Railsの中ではcontrollerを経由してviewをブラウザに返す。

コントローラファイル→フォルダ名_controller.rb

ファイルの中に自動生成時のファイル名と同じ名前のメソッド名が追加される。
コントローラのメソッドをアクションと呼ぶ。
コントローラと同じ名前のviewフォルダの中にある、
アクション名と同じ名前のhtmlファイルを探してブラウザに返す。

class 自動生成時のフォルダ名Controller < ApplicationController
 def ファイル名 #アクション
 end
end


routing

送信されたURLに対してどのコントローラのどのアクションで処理するかを決める「対応表」のこと。
ブラウザでURLを入力すると、ルーティングがURLを見て、適切なコントローラのアクションを呼ぶ。
config/routes.rbというファイルに定義され、下記のように表記される。

Rails.application.routes.draw do
get "URL" => "コントローラー名#アクション名"
end


<例>

URL Controller action
home/top home top


上記のように設定するとブラウザから「localhost:3000/home/top」というURLが送信されたとき、
homeコントローラーのtopアクションで処理されるようになる。

Image from Gyazo

topページをlocalhost:○○○○で表示

topページをlocalhost:○○○○で表示できるようにしたい場合は下記のように記述する。

Rails.application.routes.draw do
get "/" => "コントローラー名#アクション名"
end


<Ruby> ハッシュ

配列が複数の値を並べて管理することに対して、
ハッシュはそれぞれの値にキーをつけて管理する。

{キー => 値, キー => 値}



<例>

foods = {"" => "乳製品","金額" => 20}
puts foods[""]

foods[""] = "乳製品・卵" #キー名変更
puts foods[""]

foods["産地"] = "島根" #ハッシュ追加
puts foods["産地"]


結果

Image from Gyazo

シンボル

文字列をキーの部分の先頭にコロンをつけた書き方にすることもできる。
この書き方をシンボルという。
この時シンボルは英表記にする必要がある。

foods =  {:egg => "乳製品",:price => 20}
puts foods[:egg]


結果

Image from Gyazo

ハッシュの省略

キーにシンボルを用いる時省略することができる。

<例>

foods =  {egg:"卵",price:20}
puts "#{foods[:egg]}は1個#{foods[:price]}"


結果

Image from Gyazo

nil

ハッシュから存在しないキーの値を取り出した時の何もないという値は、
nilという言葉で表される。
if文で使用される。

<Ruby> each文

配列の要素の数だけ繰り返し処理をする。 ||で囲まれた変数に配列の要素が順に入っていき、each文の中の処理が実行されていく。

配列.each do |変数名|
 #処理
end



<例>

foods = ["","アボカド","マグロ"]

foods.each do |food|
  puts "#{food}が食べたい"
end


結果

Image from Gyazo

<command line> コマンドライン一覧

コマンド 内容
touch ファイル名 ファイルの作成
cat ファイル名 ファイルの中身を表示する
mkdir ディレクトリ名 ディレクトリの作成。make directoryの略。
cd ディレクトリ名 選択したdirectoryに移動。change directoryの略。
pwd カレントディレクトリを確認
ls カレントディレクトリの中身のdirectoryとfileを確認。
cd .. 一つ親のディレクトリに移動
cd homeディレクトリに移動
mv 移動するファイル名
移動先のディレクトリ名
ファイルの移動。mvはmoveの略。
mv 移動するディレクトリ名
移動先のディレクトリ名
ディレクトリの移動。mvはmoveの略。
mv 変更前 変更後 ファイルまたはディレクトリの名称を変更。
cp コピー元ファイル名
コピー後ファイル名
ファイル名のコピー。
cp -r コピー元ディレクトリ名
コピー後ディレクトリ名
ディレクトリ名のコピー。
rm ファイル名 指定されたを削除する。
rm -r 名 ディレクトリ名 指定されたディレクトリを削除する。



フォルダとディレクト
MacWindowsではフォルダという言い方が一般的。

ディレクト
ハードディスクなどの記録メディア上のファイルの保存場所。

フォルダ
ディレクトリと同意かつ、オブジェクトの容れ物という意味。

カレントディレクト
現在開けているディレクトリ。

ルートディレクト
一番親の階層のディレクトリ。homeの親階層。/で表現される。

ホームディレクト
起点にするディレクトリ。

<SQL> データ加工

重複データを省く

特定のカラムの重複を省くとき、以下の構文を使用する。

SELECT DISTINCT (カラム名)
FROM テーブル名;


<例>
f:id:kabacho23:20200905012112p:plain:w400

SELECT DISTINCT(name) 
FROM account;


結果

f:id:kabacho23:20200905012024p:plain:w100


四則演算によるカラムデータの再計算

消費税など、既存のカラム値に数値に変更を加えたい場合はこの方法を使用する。

SELECT カラム名 四則演算(+-*/) 数値
FROM テーブル名;


<例>税込み価格の算出
f:id:kabacho23:20200905012112p:plain:w400

SELECT name, price, price*1.10
FROM account;


結果

f:id:kabacho23:20200905013632p:plain:w250


集計関数

SUM関数:

WHEREで検索したデータを集計。
<例>ランチ金額の合計

SELECT SUM(price),name
FROM account
WHERE name = "ランチ";


結果

f:id:kabacho23:20200905025419p:plain:w200

AVG関数:

WHEREで検索したデータの平均を算出。
<例>ランチ金額の平均

SELECT AVG(price),name
FROM account
WHERE name = "ランチ";l


結果

f:id:kabacho23:20200905030543p:plain:w200

COUNT関数:

WHEREで検索したデータの数を集計。
nullはカウントされないので、nullをカウントしたいときは
SELECT COUNT(*)
にする。

<例>ランチの回数

SELECT COUNT(name),name
FROM account
WHERE name = "ランチ";


結果

f:id:kabacho23:20200905031130p:plain:w200

MAX,MIN関数:

MAXは最大値、MINは最小値を取得。

<例>

SELECT name,max(price) 
FROM account
WHERE name = "ランチ";


結果

Image from Gyazo

データのグループ化

GROUP BYを用いるとデータをグループ化することができる。
指定したカラムで、完全に同一のデータを持つレコード同士が同じグループになる。
SELECTのカラム名(GROUP BYのカラム名)は、複数選択可能。

SELECT 集計関数,カラム名 
FROM テーブル名
GROUP BY カラム名(SELECTと同じ);


<例>合計金額と同じカラム名をグループ化
Image from Gyazo

SELECT COUNT(name),SUM(price), name
FROM account
GROUP BY name;


結果

Image from Gyazo

WHEREとの併用

WHEREをGROUP BYと併用すると以下の順で実行される。

・検索 WHERE
WHEREでカラムの値が一致するデータが検索される

・グループ化 GROUP BY
指定されたカラムでグループ化する

・関数 COUNTなどの関数
グループ化されたデータを関数で処理

<例>交通費の使用途ごとに合計金額を出力する。
Image from Gyazo

SELECT SUM(price),name
FROM account
WHERE category = "交通費"
GROUP BY name;


結果

Image from Gyazo

HAVINGとの併用

グループ化したデータからさらに絞り込んで検索する構文。

・検索 WHERE
WHEREでカラムの値が一致するデータが検索される

・グループ化 GROUP BY
指定されたカラムでグループ化する

・関数 COUNTなどの関数
グループ化されたデータを関数で処理

・HAVING
指定した条件のデータを検索。

<例>

SELECT SUM(price),name
FROM account
WHERE category = "交通費"
GROUP BY name
HAVING SUM(price)>1000;


結果

Image from Gyazo