私は Mongoid を使用して、多数のBSON::ObjectId
インスタンスを取得しています。理想的には、取得時にそれらを文字列に変換したいと思います。正しい構文は何ですか? 次のように 2 行で実行できます。
foo = Bar.where(:some_id => N).map(&:another_id)
ids_as_strings = foo.map(&:to_s)
to_s
上記のマップ呼び出しの後にチェーンする適切な Ruby の方法は何ですか?
私は Mongoid を使用して、多数のBSON::ObjectId
インスタンスを取得しています。理想的には、取得時にそれらを文字列に変換したいと思います。正しい構文は何ですか? 次のように 2 行で実行できます。
foo = Bar.where(:some_id => N).map(&:another_id)
ids_as_strings = foo.map(&:to_s)
to_s
上記のマップ呼び出しの後にチェーンする適切な Ruby の方法は何ですか?
これは問題なく動作しますが、実行しないでください。
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}
これは、この状況で進むべき道であり、実際には見栄えが良くなります。
直接チェーンすることができます:
ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)
モデルでこれを試してみたところ、次のような期待どおりの結果が得られました。
["1", "2", ...]