【Ruby】オブジェクト指向とは
rubyを勉強する上で欠かせない、「オブジェクト指向」について自分なりにまとめてみました。
オブジェクト指向とは
オブジェクトとは、簡単にいうとモノのこと。 Rubyではほとんど全てのものがオブジェクトである(ifやelseなど、一部オブジェクトでないものもあり)。
モノ(オブジェクト)を組み立てて、設計していくことをオブジェクト指向と呼ぶ。
オブジェクト指向を理解する上で必要な要素【クラス・インスタンス・メソッド】
クラス
設計図のこと。
インスタンス
クラスを具体的にしたもの。
例えば「犬クラス」があったとしたら、犬種(チワワ、トイプードルなど)がインスタンスになる。
メソッド
メソッドで動作の指示ができる。
先ほどの犬クラス自体はまだ何もできないが、「走る」「吠える」といったメソッドを渡すといったイメージ。
class Dog def run puts 走る end #メソッドを定義 dog = Dog.new('チワワ') #インスタンスの作成 end
■参考にした記事
オブジェクト指向がわからない! そんなあなたの脳味噌をオブジェクト脳にする準備体操:CodeZine(コードジン)
【Ruby】たい焼きで理解するオブジェクト指向におけるクラスの概念 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
【Rails】リクエスト/レスポンス処理の流れ(MVC)
Webブラウザでページをクリックして、そのページが表示されるまでの流れをご説明します。
まず、大まかな全体像はこちら↓
次に1つずつ、どのような処理がされているのかを細かく見ていきます。
具体的な例えがある方がわかりやすいので、「ブログアプリの記事一覧を見たい」としましょう。
①WebブラウザからWebサーバーにHTTPリクエストが送られる
②Webサーバーはルーターに/articles/index
のGETリクエストを伝える
③ルーターはarticlesコントローラにindexアクションを呼び出すよう伝える
④articlesコントローラはindexアクションを呼び出す際に、indexアクションの中のArticle.all
(記事の全データ)を呼び出すため、Articleモデルに要求
⑤ArticleモデルはデータベースにArticle.all
のデータを要求する
⑥データベースは要求されたデータを探し、モデルに返す
⑦モデルは返ってきたデータをコントローラに渡す
⑧コントローラは受け取ったデータをインスタンス変数に代入し、ビューで使用できるようにする
⑨ビューは受け取ったインスタンス変数等を元に、HTMLを作成し、コントローラに返す
⑩出来上がったHTMLをWebサーバーに返す
⑪Webサーバーは受け取った情報をWebブラウザに返し、WebブラウザがHTMLを人が見えるように変換して表示してくれる
■参考にした記事
DIVE INTO CODE | Railsの処理の流れを理解しよう
Rails開発者が採用面接で聞かれる想定Q&A 53問(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社
assign_attributesとは
assign_attributesとは
Active Recordで用意されている、特定のattributeを変更するためのメソッド。
def update @article.assign_attributes(article_params) if @article.save flash[:notice] = '更新しました' redirect_to edit_admin_article_path(@article.uuid) else render :edit end end
update_attributesなどと違い、DBへの保存は行われないので、別途saveメソッドを使ってあげる必要があります。
ちなみに、updateとupdate_attributesの違いは引数の渡し方が違うのと、update_attributesはバリデーションのチェックがされないそうです。
※参考にしたサイト
まとめてオブジェクトの属性を変更したい時に便利!assign_attributesメソッド - その辺にいるWebエンジニアの備忘録
update_attibutesとassign_attributes違い - Qiita
【Rails】updateメソッドの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
三項演算子について
例①
@article.state = @article.publishable? ? :published : :publish_wait
↑の書き方は三項演算子というもの。
条件 ? 結果1 : 結果2
これは以下のように書き換えられる。
if 条件 結果1 else 結果2 end
つまり、例1は以下と同じ意味
(@article.state = @article.publishable?) ? (:published) : (:publish_wait)
↓
if @article.state = @article.publishable? :published else :publish_wait
※参考にしたサイト
Kaminariを使ってページネーションする
ページネーションとは
コメント一覧などを表示した時に、数が多くなると下の方までスクロールするのが大変になる。
そこで、ページを分割して表示するもの。
使い方
公式サイトはこちらです。
https://github.com/kaminari/kaminari
①Kaminariをインストールする
gem 'kaminari'
bundle install
でGemを読み込む
$ bundle install
②追加したいコントローラーのアクションに設定をする
@users = User.order(:name).page(params[:page]) #.page(params[:page])の部分を記述することでページネーションが可能になる
③ビューのページネーションを表示させたい箇所に以下のコードを追加する
<%= paginate @users %>
設定が完了すると<%= paginate @users %>
と記述した箇所に以下のようなページネーションが現れます。
(添付写真はBootstrap4のスタイルを当てています)
カスタマイズ等
公式ページにも記載がありますが、1ページに表示する数などがデフォルトで設定されているので、設定を変えたい場合は、
$ rails g kaminari:config
とコマンドを実行するとconfigファイルが作成されるので、そのファイルをいじることで変更することが可能です。
# frozen_string_literal: true Kaminari.configure do |config| # config.default_per_page = 25 # config.max_per_page = nil # config.window = 4 # config.outer_window = 0 # config.left = 0 # config.right = 0 # config.page_method_name = :page # config.param_name = :page # config.max_pages = nil # config.params_on_first_page = false end
設定を変更するときは最初の#
を外し、数字等を書き換えることで変更可能になります。