LoginSignup
0
2

More than 3 years have passed since last update.

progateで習得したRailsの基礎知識まとめ

Last updated at Posted at 2020-06-20

どんな人向けの記事か

  • Railsを学び始めて間もない人
  • Railsで初めてアプリを作ろうとしている人
  • Rails慣れはしているけど少し復習したい人

どんな記事か

Rails初学者である筆者が、先日修了したprogateのRailsコースで学んだことを並べていく記事です。
ところどころ他記事の情報で補完しているため、progate運営が表現・説明した内容とは異なる箇所もそれなりにあります。

各種概念

サーバー

クライアント(ブラウザ)の要求に応じてデータを提供するコンピュータ。
Railsで作ったアプリをブラウザで表示するためには、このサーバーを起動させる必要がある。

ビュー

ページの見た目を作るためのHTMLファイル。ブラウザとRailsのやりとりの中で、Railsからビューが返されることで、ページが表示される。
拡張子は.html.erb。erbはEmbedded Rubyの略で、HTMLファイルにRubyスクリプトを埋め込むための仕組み。
下記のコントローラ・ルーティングと同様に、ページを作成するのに必要な3つの要素のうちの1つ。

コントローラ

ブラウザにビューを返すためのもの。コントローラは目的に合わせてそれぞれ作成される。
例えば投稿に関する機能とユーザーに関する機能はそれぞれ別のコントローラファイルで規定される。

アクション

コントローラ内の、ブラウザに返すビューを見つけ出すための機能。コントローラファイル内でメソッドとして表現される。

ルーティング

送信されたURLに対して、「どのコントローラ」の「どのアクション」で処理するかを決める、対応表のようなもの。

データベース

データを保存しておくための場所。

テーブル

データベース内でデータを管理している表。行ごとのデータをレコード、列ごとのデータをカラムと呼ぶ。

モデル

データベースとのやりとりを行うクラス。モデルのインスタンスを作り、それを保存する工程を経ることでデータをテーブルに格納できる。

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

データベースに変更を指示するためのファイル。

コーディング

ビューファイルで使うコード

<% %>

ex)<%= @post %>

HTMLファイルにRubyコードを埋め込む際に、コードの前後に表記する。コードをブラウザに表示させたい場合は、コードの前後に<%= %>と表記する。

link_toメソッド

<%= link_to("表示する文字", "URL") %>
ex) <%= link_to("投稿一覧", "/posts/index")%>

リンクを作成する。HTMLファイルで使う。
第3引数に{method: "post"}を追加することで、postとして定義されているルーティングにマッチするようになる。

form_tag

<%= form_tag("URL") do %>
 データ
<% end %>

ex)
<%= form_tag("/posts/update") do %>
 <textarea name="content"><%= @post.content %><textarea>
  <input type="submit" value="投稿">
<% end %>

フォームに入力されたデータを、指定したURLに送信することができる。
しかしform_tag単体では意味がなく、textareaタグ(またはinputタグ)にname属性を指定することにより、name属性をキーとしたハッシュをアクション側に伝えることができる。
余談だが、上記のようにtextareaタグの間に値を置いておくことで、フォームを再入力する際にもともと入力していた内容の続きから入力できたりする。

errors.full_messages

<% インスタンス名.errors.full_messages.each do |message| %>
  <%= message %>
<% end %>

ex)
<% @posts.errors.full_messages.each do |message| %>
  <%= message %>
<% end %>

エラーメッセージを出力する。saveメソッドを呼び出した際にバリデーションに失敗すると、Railsでは自動的にエラーメッセージが生成されるようになっているため、each文を用いることですべて表示することができる。

yield

views/layout/application.html.erb
<%= yield %>

各ビューファイルは、application.html.erb内に表記されたyieldに代入される。
application.html.erbはサイト全体に適用するレイアウトを記載するビューファイル。

コントローラファイルで使うコード

@変数

@post = "hogehoge"

コントローラファイルで定義をすると、ビューファイルでRubyコードの埋め込みをする際に利用できるようになる。

newメソッド

モデル名.new(カラム名: )
ex) post = Post.new(content: "hogehoge")

モデルからインスタンスを作成する。

saveメソッド

インスタンス名.save
ex) post.save

作成したインスタンスをテーブルに保存する。

allメソッド

モデル名.all
ex) posts = Post.all

テーブル内の全てのレコードを取得する。

find_byメソッド

モデル名.find_by(カラム名: )
ex) post = Post.find_by(id: 1)

ある条件に合致するデータを1つ取得する。

whereメソッド

モデル名.where(カラム名: )
ex) posts = Post.where(id: 1)

ある条件に合致する複数のデータを取得する。

redirect_toメソッド

redirect_to("URL")
ex) redirect_to("/posts/index")

指定したページに転送することができる。

renderメソッド

render("フォルダ名/ファイル名")
ex) render("posts/edit")

別のアクションを経由せずに、直接ビューを表示することができる。
データの保存に失敗したときなどによく使われる。

orderメソッド

モデル名.order(カラム名: :並び替えの順序)
ex) @posts = Post.all.order(created_at: :desc) 

取得したデータの並び替えを行う。:desc は降順、:asc は昇順を表す。

destroyメソッド

インスタンス名.destroy
ex) post.destroy

指定したデータ(インスタンス)をデータベースから削除する。

変数session

session[:キー名] = 
ex) session[:user_id] = @user.id

ページを移動してもログインユーザーの情報を保持し続けるためのもの。
nilを代入するとログイン状態ではないようにすることができる。

params

ex1) @id = params[:id]
ex2) @post = Post.new(content: params[:content])

用例1. ルーティングで設定したURLの :○○ の値を取得する。
用例2. name="○○"がついたフォームの入力内容を受け取る。

before_action

before_action 全アクションで共通する処理
ex) before_action :set_current_user, {only: [:edit, :update]}

どのアクションを呼び出す前でも、必ず記述した処理が実行される。ファイルの一番上に記述する。
{only: [:アクション名]} を用いることで、処理が実行されるアクションを限定することができる。

ルーティングファイルで使うコード

getメソッド

アプリ名/config/routes.rb
get "URL" => "コントローラ名#アクション名"
ex) get "/posts/index" => "posts#index"

指定した情報を取得する。データベースを変更しない場合は大体getを使う。getと下記のpostは、HTTPメソッドと呼ばれている。

postメソッド

アプリ名/config/routes.rb
post "URL" => "コントローラ名#アクション名"
ex) post "/posts/create" => "posts#create"

データベースを変更する際、sessionの値を変更する際に使うメソッド。
HTTPメソッドは他にもいろいろあるらしいが、まだ学んでいないのでここでは省略。

名前付きパラメータ

アプリ名/config/routes.rb
get "posts/:id" => "posts#show"

ルーティングのURL部分に : で始まる文字列を置くと、その文字列はパラメータとして認識される。
そのため、この例でいえば、/posts/○○ のようなすべてのURLをshowアクションに誘導することができる。
その関係で /posts/index のようなルーティングは、/posts/:id のルーティングに引っかからないようその前に記述する必要がある。

モデルファイルで使うコード

validates

validates :検証するカラム名, {検証する内容}
ex) validates :content, {presence: true}

不正なデータがデータベースに保存されないように、データをチェックする(バリデーション)。
主な検証内容は以下の通り。

検証内容 意味
presecse: true そのカラムの値が存在するかどうかをチェックする
length: {maximum: 文字数} 規定した文字数以上のデータは保存できないようにする
uniqueness: true 重複したデータがデータベースに存在するかどうかチェックする

マイグレーションファイルで使うコード

add_column :テーブル名, :カラム名, :データ型
ex) add_column :users, :image_name, :string

既存のテーブルにカラムを追加する。changeメソッドの中に書く。

コマンドライン

  • rails new アプリ名
    入力したアプリの名前と同名のフォルダが作成され、その中に開発に必要なフォルダやファイルが用意される。

  • rails server
    サーバーの起動。

  • rails g controller コントローラ名 アクション名
    コントローラの作成。gはgenerateでも可。
    コントローラ名とアクション名は、HTTPメソッド(URL)と同じ名前を付けることが多い。

  • rails g model モデル名 カラム名:データ型
    マイグレーションファイルとモデルファイルの作成。
    モデル名は単数形かつ一文字目を大文字にする。

  • rails g migration ファイル名
    マイグレーションファイルのみを作成。
    ファイル名は add_image_name_to_users などの分かりやすい名前にする。

  • rails db:migrate
    データベースへのマイグレーションファイルの反映。
    マイグレーションファイルを作ったのにこれを実行しないとエラーが発生する。

まとめ

progateはよいです。

参考にした記事

参考にした書籍

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