Ruby on Rails

DHH流ルーティングについて(Rails)

【結論】 ・DHH(David Heinemeier Hansson)は、Ruby on Railsの生みの親 ・DHH流ルーティングとは、DHHが推奨しているRailsのルーティング手法 ・具体的には、コントローラはデフォルトのCRUDアクション(index、show、new、edit、create、update、destroy…

Callbackメソッドの「only」「except」の使い分け(Rails)

【結論】 ・Controllerのコールバックメソッドは、onlyとexceptで実行するアクションを指定できるが、適切に使い分けないと、バグ発生の要因となり得る ・基本的にonlyを使用する。指定するアクションが増えて、追加するアクションが無くなったらexceptに置…

Rubyの「nil?・empty?」とRailsの「blank?・present?」について

【結論】 ・nil?メソッドは、レシーバーがnilのときtrueを返し、nilではない場合falseを返す ・empty?メソッドは、オブジェクトが空(空文字列("")・空配列([])・空ハッシュ({}))のときtrueを返し、1つ以上の要素があればfalseを返す。文字列・配列・…

「Mysql2::Error: Data too long for column」の原因(Rails)

【結論】 ・Mysql2::Error: Data too long for columnとは、DB側の文字数制限を超えたデータを保存しようとした際に発生するエラー ・DB側の制限なので、モデルなどにバリデーションを設定していないとしても、このエラーは発生する ・対応策は、DB側の制限…

「change_table」で「bulk: true」を使用したマイグレーションの高速化(Rails)

【結論】 ・Rails のマイグレーションで使用されるchange_tableメソッドには、bulk: trueのオプションを設定できる ・このオプションにより、ALTER TABLEクエリにまとめてくれる ・このオプションは MySQLとPostgreSQLのみサポートされていている 【目次】 c…

マイグレーション作成時にchangeメソッドではなくup/downメソッドを使う場面(Rails)

【結論】 ・マイグレーションを作成する場合、up/downメソッドを利用する方法と、changeメソッドを利用する方法が存在する ・up/downメソッドはマイグレーション時とロールバック時の両方の処理内容を定義する必要があるのに対して、changeメソッドはマイグ…

URLエンコードによってパラメータの空白スペースが+に書き換わる問題(Rails)

【結論】 ・URLパラメータ(クエリ文字列)とは、URLの末尾に?を付け続けて&キー=値と記述することで、サーバーに情報を送るためにURLに付け加える変数 ・application/x-www-form-urlencodedのURLエンコードとは、URLにおいて使用できない文字を使う際に…

カラムのNOT NULL制約(null: false)を途中で設定or削除する方法(Rails)

【結論】 ・カラムのNOT NULL制約を途中で設定or削除するには、change_column_nullメソッドを利用してマイグレーションを行う ・change_column_null(table_name, column_name, null, default = nil) ・第3引数のnullフラグに、trueを指定すればNOT NULL制約…

RailsのCSRF保護について

【結論】 ・CSRFとは、WEBアプリケーションの投稿機能などを利用して悪意のあるコードを仕込むことで、認証済みのユーザーに意図しないコマンドを実行させる攻撃手法 ・対策は、GETとPOSTを適切に使い分け(RESTful)、GET以外のリクエストにセキュリティト…

ブラウザ・デバイスの判定を行うgem「browser」

【結論】 ・「browser」とは、Railsのgemの一種 ・アクセス元のブラウザ(IE/Safari/Chromeなど)や、デバイス(PC/スマホなど)の種類を判定してくれる ・ブラウザやデバイス毎に処理方法を切り替えたい場合に有用 【目次】 ブラウザ・デバイスの判定が必要…

Basic認証について

【結論】 ・Basic認証とは、ページへのアクセスを ID/パスワードで制限する為の機能。・手軽に実装できる反面、情報漏洩のリスクがある為、 セキュリティリスクの少ない物か、 一時凌ぎの対策として実装される。 【目次】 チーム開発でBasic認証の実装を行っ…