#そもそも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で定義されているメソッドを使用することができる。
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ではゲッターが自動的に定義されるため、結果的に「インスタンス.カラム名」と書くことでそのインスタンスのカラムの値を取り出すことができる。
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!"