Help us understand the problem. What is going on with this article?

rails 発展その6  n+1問題 HTTPリクエスト一覧とルーティングのコツ  ActiveRecord::Baseメソッド一覧

More than 1 year has passed since last update.

重要情報と一覧情報が欲しかったので
その備忘録を書きます。

n+1問題

処理の都合上無制限にデータが増えて行ってしまう問題

includesメソッド

n+1問題対策でincludesメソッドがあります。指定された関連モデルをまとめて取得することで、
SQLの処理を減らすことができます

controller
# 例
    def index
      @items = Item.includes(:user)
    end
# これでitemテーブルに関連するuserテーブルまとめて取得しました。

HTTPの一覧

主に使われる物はこちら

メソッド 役割
get ウェブサイトを閲覧する際にはこのメソッドが使われる。
post サーバーに情報を送信するために使われる。
delete データを削除するために使われる。
patch データを更新するために使われる。 。
put patchと同じ役割を持っている。rails3から4になる形で使われなくなった。

他にも種類はあります。
又下記のような便利なメソッドがあります。

resourcesメソッド

Railsの基本となる7つのルーティングを自動で生成するメソッド

controlle
Rails.application.routes.draw do 
  resources :items                     #items_controllerに対してのresourcesメソッド
  resources :users, only: [:show]       #users_controllerに対してのresourcesメソッド
end

ルーティングのネスト

情報が二重に必要な場合このようなネストが必要です。

routes
Rails.application.routes.draw do
  resources :items do
    resources :comments, only: [:create]
  end
end
# これでitemの中にコメントのルーティング情報が追加されるようになります。

ActiveRecord::Baseメソッド

ActiveRecord::Base というクラスを継承して使用する。
Railsにデフォルトでインストールされている。
基本知識が増えれば随時更新予定

Item.all
#モデルからすべてのインスタンス取得

Item.new(name: "", text: "Hey")
#モデルに新規インスタンスを作成

item.save
#作成したインスタンスを保存

Item.create(name: "", text: "Hey")
#newメソッドとsaveメソッドを一気に行うことと同じ

Item.find(3)  #=> <Tweet id:1, name: "", text: "Hey" >
#モデルからidが3のデータをインスタンスとして取得 ※該当するものがない場合はエラーになる

Item.find_by(name: "")
#条件に合うデータをidの若い順に1つだけ取得 ※該当するものがない場合はnilを返す

Item.where(name: "")
#条件に合うデータを複数取得

Item.where(name: "").first_or_initialize
#whereメソッドとともに使用。
#検索した条件のレコードがあればそのレコードのインスタンスを返し、なければ新しくインスタンスを作るメソッドです。

Tweet.limit(10)
#モデルからidの若い順に10つのデータを取得

Tweet.order("created_at DESC") 
#データの作成日時が新しい順にソート。DESCは降順、ASCは昇順

item.destroy
#削除

item.update
#更新
savaniased
趣味で色々勉強と投稿をしています。 最近ではPythonを初めとした、AIやデータサイエンスを勉強しています。 ただ、著作権の関係もあり投稿できないのが悩みの種ですが。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away