Orderメソッド

orderメソッド

順番に並べる。並び方を決めるメソッド

 

インスタンス = モデル名.order("並び替えの基準となるカラム名 並び順")

 

並び順について

ASC(昇順): 古いものから新しい順番。古いものが上で新しいものが下になる。

*ABCじゃないので注意

DESC(降順): ASCの逆

*DEFCじゃないので注意

 

def index
    @tweets = Tweet.includes(:user).order("created_at DESC")
  end

 

def index
@items = Item.includes(:corporation).order('created_at DESC')
end

 

N+1問題(アソシエーション)

N+1問題とは

アソシエーションでtweetとuserが結びついているとする。

tweetの情報をとって来る場合、userの情報も探して来る必要がある。そのためtweetの情報を持って来るとは別でuserはuserでtweetに紐付いているuser情報を持って来る必要があり、データベースへのアクセス回数が多くなってしまう。そのためアプリのパフォーマンス低下。

 

解決方法

includeメソッドを使う。

これでtweetとuser1回で持って来れる。

includeに.allは含まれているのでall必要ない。

情報処理が多い場合だから使う場所はindexだけで大丈夫だと思う

例)

def index
    @tweets = Tweet.includes(:user)
  end

 

 

#includeしなくてもエラーは起きないため、実感しずらい。

 

ユーザー機能(devise)の作成

deviseのinstall

#Gemfileに記述

gem 'devise'

 

ターミナル

% bundle install
% rails s
% rails g devise:install

ここまででdeviseは使用可能になる

#Userモデルを作成
rails g devise user
#テーブル作成
マイグレーションファイルにカラムを記述し、rails db:migrate
#devise用のビューを作成
#デフォルトでも存在するが、新しくビューを作りたい場合
またビューファイルを他のアプリから持ってくる場合(Finder経由)はコマンド必要ない
rails g devise:views

#deviseのコントローラーは操作できないため作らない。

#deviseに対してのコントローラーの記述はapplication_controller.rb内に記述

 

 

アプリケーション作成 最初のコマンド

アプリケーションを作る

cd ~/projects

#projectで無くても可。作成するアプリの1つ上のディレクト

 

rails _6.0.0_ new アプリケーション名 -d mysql

#この時点でアプリは作成完了

cd アプリケーション名

 

bundle install

 

#database.yml変更# encoding: utf8mb4から encoding: utf8

 

rails db:create

 

rails s