u16suzuの blog

日々学んだことのメモブログです。

学習のためRailsのコードリーディングをした時のmemo

railsrspec

  • scopeのマージは、以下のようにかくと、paramsの条件分岐が綺麗に書ける.
scope = User.where( id: user.id )
scope = scope.where( 'created_at >= ?', params[:date_from].to_date ) if params[:date_from].present?
scope = scope.where( 'created_at < ?', params[:date_to].to_date + 1.day ) if params[:date_to].present?
scope = scope.order( 'id DESC' )
  • created_at に index を貼っても良い. 日付scopeで絞る時はindexを日付に貼るべき.
  • RSpecの let{} に 前処理の do_request を書いちゃうの良い. let{:do_request}{ get /hoge, params } みたいな感じ

DBの分割方法2種類

  • 水平分割 : レコード単位で分割する. 横に切るイメージ. パーティションで代替可能で、できればパーティションを使うべき.
  • 垂直分割 : カラム単位で分割する. 縦に切るイメージ. 集約で代替可能. 集約と垂直分割の違いは、マートは元のテーブルを残すが、垂直分割は残さないこと.
    • 集約 : サマリーとマートの2種類. マートは元テーブルを残して、特定のカラムだけからなる別テーブルを作るもの。当然同期が必要.

参考サイト