Rails

t.referencesとforeign_key: true

テーブルを作成する際、外部キー周りの設定でt.referencesとforeign_key: trueが何をしてくれるのか・してくれないのか曖昧だったので調べました。 t.references 参照モデル名_idというカラム名で参照モデルのidと紐付けてくれる これだけだと参照にないidで…

where.not

アクティブレコードのwhere.notを使った実装を考えていたのですが、 where.notが変換されるSQL(WHERE ~ NOT IN)にはINの引数にNILLである値が含まれていると何も取得できないという注意点があるようなので、where.notでもそうなの?!と思い試してみました。…

外部キー制約

外部キー制について考える機会があったのでメモしておきます〜 外部キー制約とは 外部キーは関連づけているテーブル間のデータの整合性を保つために存在する制約です。 外部キー制約を設定しておくと、存在しないidで外部キーを保存する事ができなくなります…

アクティブレコードでのトランザクション

昨日はSQLでのトランザクションについて書いたので、 今日はアクティブレコードでのトランザクションについて調べてみました! 書き方 以下のように書くことができます。 ① モデル.transaction do ② DBに変更を加える(updateやdeleteなど)③ end④ 上手くいっ…

shallow: true オプション

ルーティングファイル内でshallow: trueオプションを見かけることはあったのですが、何者なのかよく分かっていなかったので調べました! shallow: true オプションとは ネストしたパスを作る際にshallow: trueオプションを付けることで、 show/edit/update/d…

includesの挙動模索

普段、N+1問題を防ぐためにとりあえずincludesをしてしまうのですが、includesがどんな挙動をしているのか理解していなかったので調べることにしました! (昨日からActiveRecord読みたい気持ちが高まっていたため、includesのソースコードを読むことに挑戦し…

銀座Railsへ行った

銀座Railsへ行って、Railsコミッターの@kamipoさんと@yahondaさんのセッションをお聞きしてきました! Active Recordの難しい話もありましたが、お話が面白かったので分からないなりにも楽しむことができました!! 自分もすぐに取り入れていこうと思った内…

またbundle installがmysqlでこけた

ちょっと期間があくとbundle installした際にmysql gemが入らなくなることがしばしばあります。 今回はopensslのバージョンが古いようでインストールに失敗しておりました。 無事bundle installできるまでの手順を書いておこうと思います。 エラー内容 bundl…

Grow.rb 〜例外処理とループ処理〜

本日はGrow.rbで例外処理とループ処理について学んできました! 以下はGrow.rbのイベントページです! growrb.doorkeeper.jp 制御構文 まずはループ処理の流れを変えるメソッドについて確認しました! 以下は制御構文についてまとめてあるるりまのページです…

bundlerのバージョン固定してbundle update

rubocopのgemだけバージョンアップしたく、以下のようにコマンドを実行しておりました。 conservativeというオプションは、依存関係にあるgemをupdateしないためのオプションです。 bundle update --conservative rubocop しかし、これだとbundlerまで2.0.2…

rubocop-railsと言うVSCodeの拡張

ローカルでrubocopを実行し忘れたままリモートへプッシュしてしまうことが多く、申し訳ないなと思っておりました。 sleckのgithubの通知が飛んでくるチャンネルが自分へのrubocopからの指摘で埋もれる。。。w 「ローカルで実行する癖をつけなくては」と日報…

activerecord-import

レコードをいっぺんに複数作成するメソッドを以下のように書いてしまっておりました。 def import_hoges hoges = params[:hoges] hoges.each do |hoge| Hoge.create!( user_id: @login_user.id, recorded_at: hoge[:recorded_at], value: hoge[:value]) ende…

Tamarb Rspecモブプロ 〜共通メソッドをモジュールへ切り出す〜

本日はTamarbのRspecモブプロがあり、今回はfeature specを書き進めていきました。 以前と同様、エディタごとにチーム分けをし、自分は人数比的にRubyMineチームへ参加しました。 知ったこと 1つのファイル内以外でも使いたいメソッドはモジュールに切り出…

rubocop&rubocop-railsを導入してみる

rubocop&rubocop-railsを個人練習用リポジトリに導入してみました! その際の手順について書いておこうと思います! やり方 gemの導入 ローカル&CI上で動かしたいので:development, :testで使えるようにしました。 group :development, :test do 略 gem 'rub…

grepをrake routes時にも使う

パスはどんな感じになってたっけ?と思いrake routesコマンドを実行することが度々あります。 でもrake routesで出てくるパスの量が多くその中から確認したいパスを見つけるのに時間がかかっておりました。 rake routesで表示できるパスを絞り込む方法があっ…

パスの連結はよろしくないらしい

以下のようにファイルパスを指定していたらrobocopに指摘されました。 deleted_image = File.new(Rails.root.join(‘public/deleted.jpg’), ‘r’) なんで良くないのか分からなかったので調べてみたところ以下の記事を発見しました。 qiita.com どうやらパスを…

submodule側のブランチを切り替える

submodule側のデフォルトブランチ(develop)にはまだ取り込まれていない機能を弄りたい状況でした。 そこでsubmodule側のブランチを切り替える方法を調べたので書いておこうと思います! 方法 submoduleのディレクトリへ移動する。 ~/p/a/app (develop)$ cd s…

[CircleCI] "You must use Bundler 2 or greater with this lockfile."というエラー

CircleCIの設定を自分でも書いてみたいと思い、自分の個人アプリにCircleCIを導入しておりました。 エラーが出て少々ハマった部分があったので書いておこうと思います! エラー内容 以下のように、bundle installを実行する部分で `You must use Bundler 2 o…

apiをvueで表示させる

昨日書きかけだったapiをvueを使って表示させる部分の流れについて書いておこうと思います! (クリックしたコメントをapiをたたいて取得してvueで表示させるだけのものです) foremanを導入 webpackerとrailsの起動を簡単にできるようにしてくれるforemanとい…

apiを作ってみる

今までviewのあるrailsしか作成したことがありませんでした。 viewのないapiだけのrailsはどんな感じなのか理解したいと思い、ミニマムなapiアプリを作ってみることにしました! 手順や注意点について書いておこうと思います! 作成手順 rails newする 通常…

gemでER図を作成してみる

新しいプロジェクトに参加することになったので、まずは現在どんなテーブルがあるのか確認してみようと思いました! そこでER図を作成してくれるgemを調べてみたところ、rails-erdというものがあると知りました! とても便利だったのでその使い方について書…

2次元配列のeachとselect

二次元配列をeachで回し、別の二次元配列と比較するという処理を読んで、「こんなことができるのか〜」と思ったのでその内容を書き留めておきます! 処理の内容 以下のような2つの2次元配列があり、その中身の配列が一致するものを判別したいという状況で…

モックが機能してくれない

あるjobのテストで、モックを使おうとしておりました。 ちゃんとかけている気がするのですが、モックが機能してくれておりません。。。 解決できておりませんが、試してみた内容について書いておこうと思います。。。 どんなモックを作りたいか pdfを作成す…

Rspecモブプロ

今日はTama.rbでRspecモブプロを行いました! 今回はcontroller specの章をエディタでチーム分けしてやっていきました! (自分はVScodeも使うのですが、人数的にRubyMineチームへ入りましたwVScode大人気だw) モブプロする中でこれは便利だと思ったことにつ…

Bundler.setupが読み込まれる流れを見てみる

昨日rails初期化を追っている中で、require 'bundler/setup’している部分がありました。 その時はそのプロジェクトで使うバージョンのgemをbundlerで読みこむ設定をしているというくらいしか調べませんでしたが、具体的に何をしているのかみてみようと思いま…

Railsの初期化プロセスを追ってみる

rails serverが起動されてアプリが動くまでの順序を知りたいと思い、Railsガイドの以下のページを読んでおりました。 railsguides.jp はじめの方にbin/railsファイルの解説が出てきたのですが、 「そもそもbin/railsのbinてなんだ?たまにbin付きでbin/rails…

config/initializers

昨日銀座Railsへ行きました。 そこでgemつくる前にconfig/initializers配下に.rbファイル作って試せるということを知りました! さらにrailsを速く動かすために何を変えればいいかコードを追っているのをみて、自分も少しコードを見たくなったのでconfig/ini…

rspecでモックを使う

apiが絡む部分のテストで、実際にはリクエスト投げて欲しくない部分がありました。 そんな時はモックを使うと便利だと知ったので書いておきます! 具体的な状況 HogeBuildJobの中にapiのリクエスト投げてしまう処理がありました。 最初、api投げる処理の直前…

クエリキャッシュ

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita こちらの記事を理解する上で、クエリキャッシュについてもわかっておかないといけないと思った為調べてみることにしました!! クエリキャッシュとは データベースを参照した結果をメモリ…

inner joinとouter join

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita 上記リンクの記事を何度か読んだことがあるのですが、 そもそもinner joinやouter joinについてよくわかっていなかったため、「includesしとけば万能そう」という理解しかできておりませ…