Railsチュートリアル 第13章 メモ書き
○マイクロポストの実装
・Micropostモデルは内容を保存するcontent属性(text型)と、特定のユーザーとマイクロポストを関連付けするuser_id属性(integer)の2つから成る
・$ rails generate model Micropost content:text user:references
→AplicationRecordを継承したモデルが生成
+user:referencesでbelongs_toも追加
・マイグレーションファイルも同時に生成
Userモデルとの違いは以下2つのコードが追加されている点
t.references :user, foreign_key: true
add_index :microposts[:user_id, :created_at]
・バリデーション:
存在性と長さの2つ
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
・関連付け:
それぞれのマイクロポストは一人のユーザーに関連付けられる
+それぞれのユーザーは複数のマイクロポストと関連付けられる
→belongs_to/has_manyによる関連付け
user.microposts.create
user.microposts.create!
user.microposts.build
上3つに代表されるメソッドが使用可能に
・Micropostの投稿を降順にする場合:
default_scope -> { order(created_at: :desc) }
※->(ラムダ式):ブロックを引数に取り、callメソッドが呼ばれた時、
ブロック内の処理を評価する
・has_many :microposts,dependent: :destroy
→マイクロポストがその所有者と一緒に破棄されることを保証する
・id="micropost-<%= micropost.id %>:
将来的にJavaScript でマイクロポストを操作する場合に有効
・マイクロポスト作成・削除にはログインが必要→ logged_in_userメソッドをApplication コントローラに
・Micropost.where("user_id = ?", id)
→?でSQLクエリに代入される前にidがエスケープで、SQLインジェクションというセキュリティホールを避ける
・マイクロポストの削除は投稿ユーザーと管理者のみに限定
・request.referrer:一つ前のURLを返す
・Railsでファイルをアップロードする場合はActiveStorageを使う。
rails active_storage:install
※但し、フォーマット機能やバリデーション機能は実装されていないため、gem :'active_storage_validations'をインストールする
・has_one_attachedで1つのマイクロポストに一つの画像(has_many_attachedで複数の画像)