LoginSignup
1
2

More than 5 years have passed since last update.

ActiveRecordのValidationの:if, :unlessでprocまたはLambdaのどちらを使うべきか

Last updated at Posted at 2017-01-11

※procとはProc.newで生成されるオブジェクトを指しています。

結論

結論から言うとどちらでもよい。
どちらを使うべきかというタイトルで、どちらでもよいという結論にしてしまって申し訳ないのですが、、、

始めに思っていたこと

procとLambdaの違いはreturnbreakの挙動の違いと、引数の数の検証です。ここでreturnbreakの挙動は関係ないと思ったので、引数の数の検証をしてくれるLambdaを使うのがよいと思いました。しかし、Lambdaを使ったときに引数を取っても取らなくてもエラーがでないので、なぜだという感じでした。

ActiveRecordの処理

紐解くカギのmake_lambdaでは、引数の数に応じて処理が書かれて、instance_execの引数としてproc, Lambdaが渡されてました。なので、procでもLambdaでもどちらでもよいということになります。

ちなみに、Rails guides Active Record Validationsでは、Procを使えるとの記述があるのですが、Lambdaが使えるとの記述はないです。問題なく使えますが。Rails guidesではa Proc objectと書かれているので、Lambdaも含まれます。

あとがき

Client side validationsを使うときに:if:unlessのオプションにLambdaを使えない不具合があったのですが、使えるようになりました。PRを送るためにActiveRecordeのコードを読んでみました。コードを読むと色々勉強になるね。一応、PRを送ったのだけど、僕のPRはクローズされてコミットがこのPRに取り込まれてたw #686

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2