gaienrb#13を開催しました。
こんにちは。みやつです。
先週は肉の日ということもあり、焼き肉を食べにいっていたのでお休みしていたgaien.rbですが、今週はまじめに開催しました。
やったこと
今日はrails tutorialの6.2.5をやりました。 mail addressの一意性検証ということで、Userモデルのmail addressにバリデーションを追加しました。
class User < ActiveRecord::Base : validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness:true end
最後のuniqueness:true
がポイントですね。
これだけでアプリケーション側で一意制約をつけることができるようです。便利。
ただ、これだと真に一意性を保証したことにはならないとのこと。
どういうことかというと、例えばユーザ登録の際に登録ボタンをすばやく2回押してしまった場合に、同じmail addressを持つレコードが2つできてしまう場合があるようなんですね。
それをさけるためにはテーブルのカラムにインデックスを張って一意を保証しましょう。という話がのってました。
多分フロント側でも2重送信は抑制するし、モデルの中でも抑制するし、DBでも抑制しますよね。 こういう検証は過剰なくらいがちょうどいいんでしょうかね。
手を抜いてどこか1つにしてしまいそうですが、ちゃんとやれってことでしょうね。
はまったこと
つらつらと写経をしていたんですが、bcrypt-ruby gem をインストールするところでこけてしまいました。
Installing bcrypt-ruby (3.1.2) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. : Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
こんなエラーがでるんですが、よくよむとMake fileが作れないとかいってる。 なんでかなぁと考えてみると最近macのOSが新しくなってたのでその影響だろーと疑って、xcodeのコマンドラインツールを入れてみたらうまくいきました。
このコマンドラインツールのインストール方法がちょっと今までのやり方と違っていたので以下にメモりました。よかったらみてやってください。
MavericksでCommand Line Tools for Xcodeをインストールする
おわりに
macのOSアップデート怖い。