読者です 読者をやめる 読者になる 読者になる

Active record についてまとめ

Active Recordとは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。Active Recordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにします。

----------------------------------------------------------------------------------------------------

出力方法まとめ 手打ちなので入力ミスあるかもです。。。

```rb

post.all
Post.first # 一番目

Post.last #最後

Post.last.title # 最後のPostのタイトル
Post.find(3) #idが3のデータ
Post.find_by_title("title2")#ダイナミックファインダー=>フィールドで探せる。この例だとtitle("title2")


Post.find_by_title_and_id("title2",2) #titleとidが一致しない場合はnilが返ってくる!

 

Post.order("RANDOM()").limit(3) #ランダムに3つ取得

```

----------------------------------------------------------------------------------------------------

 

where句

p Post.where(:title => "title1", :id => 1)  # ピンポイントで指定

p Post.where("title = ? and id = ?", "title1" , 1)  #プレイスホルダー
p Post.where("id > ?". 2)  #idが2より大きいもの
p Post.where("body like ?", "hello%" )  #部分文字列で指定
p Post.where(:id => 1..3)  #範囲指定

p Post.where(:id => [1.3])  #飛びとびで指定

p Post.order("id desc").limit(3)  #新しいものを3件表示

----------------------------------------------------------------------------------------------------

⚠️要チェックscope!!

 

class Post < ActiveRecord::Base

scope :top3, order("created_at").limit(3)#検索条件を定義できるscopeメソッド
end
p Post.top3 =>top3というメソッドを使えるようになる!!

----------------------------------------------------------------------------------------------------

 

loggerが便利みたいです=>ターミナル上でどのような検索指定をしてるか見やすくなる!

使用例赤字が適用箇所

require 'active_record'
require 'logger'  #便利ツール
ActiveRecord::Base.establish_connection("adapter"=>"sqlite3","database"=> "./blog.db")
ActiveRecord::Base.logger = Logger.new(STDOUT)  #便利ツール

class Post < ActiveRecord::Base
scope :top3, order("created_at").limit(3)   #検索条件を定義できるscopeメソッド
end
p Post.top3

 

-----------------------------------------------------------------------------------------------------

 

Post.where(:title => "title5").first_or_create   #無かったら新規で作ってくれる

又は

Post.where(:title => "title6").first_or_create do |p|
p.body = "hello6"
end


p Post.all

----------------------------------------------------------------------------------------------------

 更新方法

post = Post.find(1)

post.update_attributes(:title => "ggg", :body => "ok?")
p Post.first

 

複数更新

Post.where(:id => 1..3).update_all(:title => "hogehoge",:body => "okok!")

p Post.all

----------------------------------------------------------------------------------------------------

 

削除

delete 単体recordを消す 処理がdestroyより早い

Post.where(:id => 1..2).delete_all

destroy  関連するオブジェクト、関連データまで消す

Post.find(3).destroy
p Post.all

----------------------------------------------------------------------------------------------------

 

バリデーション

 

validates :title, :presence => true  #titleが空欄だとエラー

validates :body, :length => {:minimum => 5} #5文字以下だとエラー

 

----------------------------------------------------------------------------------------------------

⚠️アソシエーション  関連付け 

class Post < ActiveRecord::Base

has_many :comments    #postは複数のcommentsを持っている

end

 

class Comment < ActiveRecord::Base

belongs_to :post    #commentsは一つのpostに紐づく

end

 

post = Post.find(1)

post.comments.each do |comment|  ##紐付いたおかげでこのようなシンプルな記述が可能!

p coment.body

end

 

以上です。しっかり DB勉強せねば。。。