Lei's Notebook

No newline at end of fileエラーについて

毎回Lintチェックで怒られたエラー.. なんで最後に新しい行が必要なの?と調べたら、理解が全然間違った。。 ここのnewlineは新しい行の’new line’ではなく、newline記号のことだ。 いわゆる行末記号(改行記号とも言われるらしい) No newline at end of fileは末尾に新しい行がないではなく、末尾に行末記号がないという理解の方がより正しい。 ne...

RailsでのN+1問題の原因と対策

N+1問題の原因 Lazy loading の設計で、テーブル情報が必要になった時だけ、SQLクエリを発行して取得する。 そのせいで、投稿一覧画面を表示するとき、個々の投稿の表示が処理されるたびに、ユーザー情報を取得するSQLクエリが発行されることになる。 n個の投稿があるなら、ユーザー情報を取得するクエリがn回発行される SELECT "users".* FROM "users" W...

INDEX、複合INDEX、UNIQUE制約とUNIQUE INDEXについて

INDEXとは 特定のカラムからデータを取得する際に、テーブルの中の特定のカラムのデータを複製し検索が行いやすいようにしたもの。 例えばユーザー名を検索する場合、データベースはデフォルトで表の1行目から最後まで探す、いわゆる全表スキャン(Full-table Scan)の方法。  もしユーザー名にindexをつけると、本の索引のように、アルファベット順などのアルゴリズムを使って途中から...

ルーティングのcollectionとmemberについて

collectionとmemberの使い分けについて、ID取得必要かどうかで判断するとの説明が多く見かけて、理解が曖昧だったけど、stackoverflowの回答を見て、ようやく納得した内容をメモする。 結論 違いはrouteにidが付くか付かないかと言うより、個別リソースに対してのアクションなのか、リソース全体に対してのアクションなのか、ということ。 特定のリソースに対してのアクション...

provide と content_for、Streaming(viewとlayoutの評価順)について

動的タイトルを出力するため、content_forを使うのがよく見かけるけど、Rails Tutorialの中に、provideメソッドを推奨しているそう。 Railsでの開発経験者であれば、この時点でcontent_forを検討すると思いますが、残念ながらAsset Pipelineと併用すると正常に動作しないことがあります。provideメソッドはcontent_forの代替です。...

パーシャルに渡す変数はなるべくローカル変数にした方が良い

form_with model: postとfrom_with model: @postの2種類記法で戸惑っていたので、パーシャルに渡す変数について、調べていた。 結論 インスタンス変数か、ローカル変数か、form_withの挙動に特に影響がなさそうだが、 パーシャルにはなるべくローカル変数を渡すのが良いことがわかった。 理由 インスタンス変数を使うと、コントローラとも結びついてしまい...