map(&:email)が何を提供するかはすでにご存知だと思いますが、これを最初に見たときと同じことだったので、どのように、そしてなぜかを尋ねていると思います。つまり、これはブードゥーの結果があなたに返ってくる、より高度なルビーの魔法の1つです:)
基本的に、マップ関数を見てみましょう。それ自体、最も基本的な使用法は、ブロックレベルのコマンドを受け入れることです。そして、繰り返し処理した後、デフォルトの戻り値を取得して、使用できるように配列にチャックします。たとえば、これを見てみましょう
list = User.all
したがって、ユーザーオブジェクト[ユーザーモデル、ユーザーモデル]などのリストを取得します。
list.map do |user|
user.email
end
このブロックをIRBまたはRailsConsoleで実行すると、["some @ email.here、another@email.here"]などが表示されるので、この結果をキャッチして変数に割り当てます。
email_list = list.map do |user|
user.email
end
これで、email_listは["some @ email.here、another@email.here"]と等しくなります。マップ関数の背景を取得したので、パラメーターを受け入れるさまざまな方法を詳しく見ていきましょう。
list.map {|user| user.email }
これは上記と同じですが、中括弧を使用してブロックロジックを囲みます
list.map(&:email)
これは上記の省略形です。ブロックを定義することで、ブロックアイテムで実行する子関数を指定するだけです。
これにより、速記法とそれに相当するブロックレベルについて少し洞察が得られたことを願っています。