facebook twitter hatena line email

「Ruby/rails/dbモデル」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(削除)
(2つ条件をつけ検索)
 
(同じ利用者による、間の5版が非表示)
行11: 行11:
 
  user = User.find(1) # idが存在しない時はerrorが発生する(発生させないようにするにはwhere(id: 1)を使う
 
  user = User.find(1) # idが存在しない時はerrorが発生する(発生させないようにするにはwhere(id: 1)を使う
 
  user = User.find_by(email: "test@example.com")
 
  user = User.find_by(email: "test@example.com")
 +
user = User.find_by_id(1)
 +
user = User.find_by_name("taro")
 +
user = User.find_by_email("test@example.com")
 
  users = User.where("email = ?", "test@example.com").first
 
  users = User.where("email = ?", "test@example.com").first
  
==検索複数==
+
==検索複数(where)==
 
  users = User.where("email = ?", "test@example.com")
 
  users = User.where("email = ?", "test@example.com")
 +
users = User.where("rating > 1000")
 
  users = User.where("email = :email", email: "test@example.com") # こちらの方が可読性が良い
 
  users = User.where("email = :email", email: "test@example.com") # こちらの方が可読性が良い
  
行20: 行24:
 
  users = User.where("name = :name", name: "taro")
 
  users = User.where("name = :name", name: "taro")
 
                   .where(del_flag: false)
 
                   .where(del_flag: false)
 +
 +
==OR検索==
 +
.where("id = ? OR user_id = ?", id, id)
  
 
==順序==
 
==順序==
行26: 行33:
 
==件数==
 
==件数==
 
  users = User.limit(5)
 
  users = User.limit(5)
 +
users = User.take(5)
 +
 +
==件数(開始件数指定)==
 +
users = Users.limit(5).offset(100)
  
 
==group by==
 
==group by==
行50: 行61:
 
==dao的記述==
 
==dao的記述==
 
  class User < ApplicationRecord
 
  class User < ApplicationRecord
   def find_by_id(id)
+
   def self.find_by_id(id)
 
     return where(id: id).first
 
     return where(id: id).first
 
   end
 
   end
 
  end
 
  end
 +
 +
アクセス方法
 +
User.find_by_id(1)

2018年4月9日 (月) 14:19時点における最新版

table本体クラス

例:user (app/models/user.rb)

class User < ApplicationRecord
end

ApplicationRecordを継承する

全て

user = User.all

検索一件

user = User.find(1) # idが存在しない時はerrorが発生する(発生させないようにするにはwhere(id: 1)を使う
user = User.find_by(email: "test@example.com")
user = User.find_by_id(1)
user = User.find_by_name("taro")
user = User.find_by_email("test@example.com")
users = User.where("email = ?", "test@example.com").first

検索複数(where)

users = User.where("email = ?", "test@example.com")
users = User.where("rating > 1000")
users = User.where("email = :email", email: "test@example.com") # こちらの方が可読性が良い

2つ条件をつけ検索

users = User.where("name = :name", name: "taro")
                 .where(del_flag: false)

OR検索

.where("id = ? OR user_id = ?", id, id)

順序

users = User.order(:created_at)

件数

users = User.limit(5)
users = User.take(5)

件数(開始件数指定)

users = Users.limit(5).offset(100)

group by

users = User.select("date, sum(date)").group("date")

特定カラムのみ

users = User.select("name, created_at")

insert

user = User.new(name: "taro", email: "test@example.com")
user.save

or

user = User.create(name: "taro", email: "test@example.com")

保存

user = User.find(1)
user.name = "taro"
user.save

削除

user = User.find(1)
user.destroy

dao的記述

class User < ApplicationRecord
  def self.find_by_id(id)
    return where(id: id).first
  end
end

アクセス方法 User.find_by_id(1)