勉強会メモ
今回もまとまりのない自分のための備忘録ですw
rails _4.2.3_ new sample_app (バージョン指定)
↓
モデル作成(単数形!!!!!!!!!!!!!!!!!!)
↓
コントローラー(複数形)
---------------------------------------------------------------------------------------------------
command + / で一瞬コメントアウト
<%# コメントの仕方,周りに見られないパターン %>
rake notes でコマンド上でメモが一覧表示される。
---------------------------------------------------------------------------------------------------
ctrl + a コマンド上で先頭の文字にカーソルが当たる
ctrl + e コマンド上で最後の文字にカーソルが当たる
---------------------------------------------------------------------------------------------------
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勉強せねば。。。