LoginSignup
110
112

More than 5 years have passed since last update.

Rails: ActiveRecord::Baseメソッドのまとめ

Last updated at Posted at 2018-08-23

そもそも1: ActiveRecordとは

・Ruby on Railsで採用されているOR Mapperのこと。
・モデルとテーブルをつなぎ合わせることでRailsからテーブルのレコードにアクセスできるようにする役割がある。
・Railsにデフォルトでインストールされており、実際に利用する際には ActiveRecord::Base というクラスを継承して使用する。



*ORM (オブジェクトリレーショナルマッピング)とは、直接SQL文を書く代わりに非常に短いコードでデータベースの読み書きを行える機能のこと。OR Mapperとは、そのためのモジュールのこと。

そもそも2: ActiveRecord::Baseメソッドとは

ActiveRecord::Baseで定義されている「テーブルにアクセスして情報を取得するためのメソッド」のこと。
・モデルクラスはこのActiveRecord::Baseというクラスを継承しているが、クラスを継承した場合は継承元のクラス(親クラス)で定義されているメソッドを利用することができる。
そのため、モデルクラスはActiveRecord::Baseメソッドを用いて、テーブルにアクセスし情報を取得することができる。
・

例えば、rails g model tweetのコマンドを実行すると、モデルクラスであるTweetクラスが作成される(Tweetモデル)が、そのTweetクラスはActiveRecord::Baseを継承している。そのため、Tweetクラスのインスタンスに対して、ActiveRecord::Baseで定義されているメソッドを使用することができる。

(例)app/models/tweet.rb
class Tweet < ActiveRecord::Base   
end

ActiveRecord::Baseメソッドの具体例

上記の例のようにTweetクラスがある場合。

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

Tweet.new(name: "John", text: "Hello!")
#Tweetモデルに新規インスタンスを作成

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

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

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

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

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

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

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

tweet.destroy
#削除

tweet.update
#更新

おまけ: ゲッター

ゲッターとは、インスタンス変数の値を取得するためのメソッド。
本来Rubyでは@nameなどのインスタンス変数の値はクラス内からしか取得出来ないため、
クラス外からインスタンス変数の値を取得するには、クラス内に定義する必要がある。

Ruby on Railsではゲッターが自動的に定義されるため、結果的に「インスタンス.カラム名」と書くことでそのインスタンスのカラムの値を取り出すことができる。

参考: 【Ruby】「ゲッター」と「セッター」を理解する

class Tweet
  def initialize(name, text)
    @name = name
    @text = text
  end

  def name  #これがゲッター
    @name
  end

  def text  #これがゲッター
    @text 
  end
end

tweet = Tweet.new("John", "Hello!")

puts tweet.name  #=> ”John”
puts tweet.text  #=> "Hello!"

110
112
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
110
112