-1

同僚と私は ActiveRecord から抽象化するリポジトリ パターンを Rails アプリに実装しています。本日、配列を取得する find をまだサポートしていないことに気付きました。これを試みているうちに、さまざまな書き方が考えられました。

4 つの可能性は、この要点で概説されています: https://gist.github.com/jseakle/6875446

私の同僚はもともと 1 番を支持していました。私は #2 を好みました。なぜなら、AR の動作によく似ていて、このコードを使い始める新しい開発者を混乱させる可能性が低いからです。しかし、その後、彼は議論の名前が今嘘をついているという問題を提起したので、私たちは 3 でアイデアを生成しました。しかし、非常に長く、少しばかげているように見えます。

どれが一番良いと思うか、それぞれの長所と短所を知りたいです。

4

4 に答える 4

1

ActiveRecord::Base#find個別の引数または配列として、必要な数の ID を受け入れます。nそれを行う最もクリーンな方法は、 IDをn個別の引数として送信することだと思います。すなわち:

[1] pry(main)> ids = 1
=> 1
[2] pry(main)> Project.find(*ids)
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Project:0x3fedc17ad980>
[3] pry(main)> ids = [1,2,3]
=> [1, 2, 3]
[4] pry(main)> Project.find(*ids)
  Project Load (0.8ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 2, 3)
=> #<Array:0x3fedc251ba54>
[5] pry(main)> Project.find(ids)
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 2, 3)
=> #<Array:0x3fedc2fc8164>

*foo単一のオブジェクトまたはオブジェクトのコレクションに対して安全であるため、これが最もクリーンであると提案します。

于 2013-10-07T22:06:26.157 に答える
0

私は選択肢 1 に賛成です。特定の型をチェックするのは好きではありませんが、配列のように動作できるか、find_all に応答するかを確認してください。

于 2013-10-07T22:03:26.447 に答える
0

#1 が最も明確で、現時点ではそれが最も重要だと思います。それは常に私の弁別者ではありませんが、その例には最も少ない行、および/または最も短い行があり、最も単純な式があります。期待通りに読めます。もちろん、私の意見です。

于 2013-10-07T21:58:19.977 に答える