0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby on Rails備忘録

Last updated at Posted at 2022-09-07

初めに

これはRailsを触っている中で疑問に思ったことをただメモするだけのものになります。
少しFlaskをかじっていたので「Flaskでいうところの...」みたいな表現多め。

MVCモデルって何

ModelViewControllerのそれぞれの頭文字からきているモデルのこと

Modelの役割

データを処理したりする部分のこと。Controllerとデータベースの仲介役的な立ち位置。

Viewの役割

ユーザーが実際に見る画面のこと。HTMLとかの部分。
ユーザーのリクエストをControllerに渡す役割もある。

Controllerの役割

ViewModelの間にいる存在。司令塔的な立ち位置。
ViewからのリクエストをModelに指示したりする。

まとめ(個人的解釈)

Viewが注文(リクエスト)を受け取りControllerに送る。
Controllerは送られた注文をもとにModelに注文の商品(データ)をとってくるように指示。
Modelは指示された内容のデータをデータベースからとってくる。
みたいな流れ。

gemって何

  • RubyGemsが公開しているパッケージのこと
  • パッケージを管理しているシステムの名前
    らしい。
    Pythonでいうpipとかconda的な感じかな?

Gemfile

gemパッケージを管理するためのファイル。環境に必要なパッケージがまとめられているやつ。作成したいRailsアプリのルートディレクトリに初めから入っている。

コマンドプロンプト
gem 'gem名','バージョン指定'

こんな感じでgem名バージョンがまとめられている。

bundler

gemの一種で複数のgemのパッケージ間の依存関係を保ちながらパッケージをインストールしてくれるやつ。これのおかげでバージョン間のトラブルを避けることができる。

コマンドプロンプト
bundle install

このコマンドでGemfileに入っているパッケージをインストールしてくれる。

Ruby on Rails

プログラム言語Rubyで動くwebアプリケーションフレームワークのこと。
PythonでいうとことのFlaskとかDjangoみたいなもん。

Rubyでよく使う構文

Pythonでいうfor文

配列.each do |変数名|

do忘れがち。

Railsでアプリケーションを作成する方法

アプリ開発に必要最低限なファイルはRailsのコマンドを使って作成する。

コマンドプロンプト
rails _Railsのバージョン_ new アプリケーション名

Railsのバージョンはrails -vで確認できる。アプリケーション名は任意。
実行すると指定したアプリケーション名のフォルダが作成される。そのフォルダの中にアプリ開発に必要なファイルやフォルダも同時に作成されている。

データベースの作成方法

Railsでのデータベースの作成は以下のコマンドを使う。

コマンドプロンプト
rails db:create

作成されるデータベースはconfig/database.ymlにあるファイルをもとにして作られるらしい。初期はsqlite3でデータベースが作成されるぽい。

データベースを作ったら次にこのコマンドを実行する。

コマンドプロンプト
rails db:migrate

これでデータベースの作成はおしまい。
ここでデータベースに変更を加えることができる。何かしらデータベースに追加とか削除をするときにはこのコマンドを使ってデータベース側に変更を加えますよ宣言をする必要がある。
具体的にはmigrateファイルのchangeメソッドを実行するためのコマンド。

データベースの初期化

rake db:migrate:reset

このコマンドで全レコード削除からのテーブルを再構築

rake db:seed

このコマンドでseeds.rbに書いてあるコードを実行

すでにあるテーブルにカラムを追加するコマンド

migrateファイルの作成をする。

コマンドプロンプト
rails g migration migrateファイル名

作成したファイルのchangeメソッドに追加カラムの情報を入れる

作成したmigrateファイル
def change
    add_column :テーブル名, :追加するカラム名, :追加するデータ型
end

最後に変更を反映(changeメソッドを実行)

コマンドプロンプト
rails db:migrate

マイグレーションって何

Controllerの作成方法

Controllerの作成には以下のコマンドを使う。

コマンドプロンプト
rails g controller コントローラー名

実行するとapp/controllersフォルダに指定したコントローラー名のファイルが生成される。コントローラー名_controller.rbっていうフォルダ名になっているはず。
コントローラー名複数形の単語が好ましい

Modelの作成方法

ここではModelを作成していく。イメージ的にはデータベースが一つのエクセルファイルだとして、ここはシートを作成する感じ。
モデル名には単数形の単語にするのが命名規則。
頭文字は大文字

コマンドプロンプト
rails g model model名 カラム名:データ型 カラム名:データ型 カラム名:データ型...

作成したら以下のコマンドでデータベースに変更反映

コマンドプロンプト
rails db:migrate

model名がいわゆるシート名みたいな感じ。カラム名は列名を指定している。データ型は入れるデータの形を指定する。

  • string : 文字列(1~255文字)
  • text : 長い文字列(256~4294967296文字)
  • integer : 整数(4バイト)
  • bigint : 整数(8バイト)
  • float : 浮動小数
  • decimal : 精度の高い小数
  • datetime : 日時
  • timestamp : タイムスタンプ
  • time : 時間
  • date : 日付
  • binary : バイナリデータ
  • boolean : Boolean

Viewの作成方法

コントローラーを作成するとapp/viewsの中に指定したコントローラー名のフォルダが作成されるので、このフォルダにファイルを追加していく。ファイルの拡張子は.html.erbという少し特殊なやつ。Ruby対応HTML的な感じ。
ファイル名はコントローラーで指定するアクションと同じ名前にすること。そうすることでアクションを実行したら同じ名前コントローラー名のフォルダの中の指定したアクションと同じ名前のViewのファイルが表示される。
Flaskでいうrender_templateが実行されるイメージ。

<%= これで囲むとHTMLに表示されるRubyを埋め込むことができる %>
<% これで囲むとHTMLに表示されずにRubyを埋め込むことができる %>

ルーティングの書き方

config/routes.rbのファイルでルーティングを決めていく。
書き方はこんな感じ。

routes.rb
HTTPメソッド 'URL' => 'controller名#action名'

HTTPメソッドにはget``post``patch``deleteが入る。
URLの部分はルーティングの部分。
Flaskでいう@app.route('/')の部分。
ルーティングは上から探索されるので順番には注意すること。
:idのような変数を扱うルーティングは最後に書くこと。

Controllerでの操作

controller
class controllerController < ApplicationController
    def index
    end
end

こんな感じで関数みたいにして書いていく。これはFlaskと似ている。
ただFlaskみたいにrender_templateしなくても関数と同じ名前のViewファイルに画面遷移してくれる。賢い。

action内での変数定義の違い

action内での変数定義には二つやり方がある。

@変数名
変数名

@が先頭につく変数はViewで使うことができる。
@がつかない変数はViewで使うことはできない。そのアクション内でのみ使用可能。

params

paramsはpostされた情報、あるいはURL内の変数の情報が入っている。
params内の変数を指定することで特定の情報を取り出せる。

params[:変数名]

session

ログインしたときなどにユーザー情報を保持するための変数。
この場合データベースに保存されず、ブラウザ側に保存されログイン中は情報と一緒にこのセッション情報もブラウザから送られる。

session[:キー名] = 

ログアウトするときにはこのセッションを破棄する(空にする)ことで実現できる。

session[:キー名] = nil

セッションの値をnilにすることで値を空にすることができる。

application_controller

これはすべてのコントローラーに共通する処理をまとめることができる。

before_action

これはアクションを行う前に実行されるアクション

before_action: 関数名
def 関数名
    処理
end

こうすることでアクションが実行される前に指定した関数名のアクションを実行することができる。

Viewでの操作

link_to

.html.erbファイル内に

<%= link_to '表示したい文字' controller名_action名_path%>

と指定することで。controller名の指定したaction名が実行される。
Pythonでいうurl_forで関数名を指定するイメージ。
link_toの部分はコンパイルされたとき実際のView上ではaタグとして生成される。
またこの時のHTTP通信はGETのみ対応している。そのためPOSTに対応させるためには以下のように設定する。

<%= link_to '表示したい文字' controller名_action名_path, {method:'post'}%>

form_for

View上で入力フォームを作るときに用いる。ユーザーが入力した値を変数にまとめてコントローラーに送る。
この時送り先は指定しなくても勝手にcreateというアクションに飛ぶようになっている。すでに情報を持っている場合はupdateというアクションに飛ぶ。

<%= form_for @変数名 fo |f| %>
<!-- form内容 -->
<% end %>

form_forを使うときはコントローラー側で以下のように変数を設定する。

def new
    @変数名 = モデル名.new

これでデータベースに登録するためのレコードを新規で作って変数に代入している。

form内容の種類

#{式・変数}

これを使うことで変数や式を展開し一つの値に戻すことができる。

redirect_to

このコマンドで既存のViewに対応したURLを指定することで指定したViewにリダイレクトすることができる。

def index
    redirect_to('指定のURL')
end

Modelでの操作

validate

これを指定することで追加するデータの制限を加えることができる。

validate :カラム名, {presence:true}

これは空のデータを受け付けない設定。

validate :カラム名, {length,{maximum:140}}

これは文字数の最大を140とする設定

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?