3

私は Mongoid を使用して、多数のBSON::ObjectIdインスタンスを取得しています。理想的には、取得時にそれらを文字列に変換したいと思います。正しい構文は何ですか? 次のように 2 行で実行できます。

foo = Bar.where(:some_id => N).map(&:another_id)
ids_as_strings = foo.map(&:to_s)

to_s上記のマップ呼び出しの後にチェーンする適切な Ruby の方法は何ですか?

4

2 に答える 2

9

これは問題なく動作しますが、実行しないでください。

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)

確かにクールに見えますが、考えてみてください。2 つのマップを作成しています。マップは、配列などをループするためのものであり、各位置で動作し、結果とともに新しい配列などを取得します。

では、2 つの操作を実行したいのに、なぜ 2 つのループを実行するのでしょうか。

ids_as_string = Bar.where(:some_id => N).map {|v| v.another_id.to_s}

これは、この状況で進むべき道であり、実際には見栄えが良くなります。

于 2012-05-16T01:46:48.427 に答える
1

直接チェーンすることができます:

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)

モデルでこれを試してみたところ、次のような期待どおりの結果が得られました。

["1", "2", ...]
于 2012-05-16T00:53:53.553 に答える