Lei's Notebook

insert_allやupdate_allを使って、SQLクエリの発行を削減する

今回は東京都知事杯ハッカソンに参加して、二日間のチームワークの下で、なんと投票マッチングアプリのMVPが出来上がった。 ただ、小さいアプリだけどめっちゃSQL走っていると気がついたので、もっと改善できないかなと思った。 コード全体をもう一度整理して、特にSQL大量発行する箇所に目を留めた。 ユーザーと政党テーブル、質問テーブルを紐付けるところ ユーザーの選択回答を保存するところ ...

ActiveModelでは`text`型は指定不可のことについて

今回のFormObjectでうっかりbodyのタイプをtextに指定してしまい、Unknown type :textのエラーが出た。 調べたら、ActiveModelではtextタイプをサポートしてないことがわかった。 サポートしているタイプはドキュメントでの明確な説明は見つからなかったが、ソースコードでのファイル名を見れば何とか推測できる Rails APIでのファイル名リストを見ると、...

単一テーブル継承(STI)について

応用篇でのtaxonomiesテーブルは何なんだって気になってて、調べてみたら、単一テーブル継承(STI)で使ってるテーブルのことがわかった。 同じ親クラスから継承している複数の子モデルの情報は各自のテーブルではなく、全てを親モデルのテーブルに記入する。 各子モデルの情報はtypeコラムで標識する。 今回はauthor, category, tagの三つのモデルの情報をtaxonomie...

Capybaraで新しいwindowを指定するため、window contextを切り替える方法

Capybara で system テストを行った時、can't find element'のエラーが出た。 byebugとpage.body`で確認したら、リンクをクリックした前のページに止まっていることがわかった。 調べてみたら、その原因はページ内のリンクをクリックして、新規 window/tab で開く場合は、window contextは自動切り替えがなく、前のページに止まること。...

Deviseやsorceryを使わないやり方で、パスワードリセット機能の流れを理解する

SorceryのReset passwordモジュールを使って、パスワードリセット機能を実装するという課題だったが、sorceryの手順でなんとなくできたけど、メソッドの意味や流れがなかなかうまく理解できなかった。 それで補充情報を検索してみたら、gemを使わないやり方のyoutube解説動画を見つけた。 必要最小限のコードでパスワードリセット機能を作りながら、大体の流れを理解できてから...