>From the answers I got, I guess this isn't a desired feature at the moment.

Anyway, thanks to everyone involved!

El vie., 18 may. 2018 a las 17:53, Alberto Almagro (<
albertoalma...@gmail.com>) escribió:

> Hi Abdel,
>
> sorry for the confusion, I guess I didn't explain myself properly.
> `orders` would be a collection composed by instances of Order model. For
> example, imagine you do `Order.last(5)` to get the last 5 orders. I hope
> this clarifies the example.
>
> Cheers,
> Alberto
>
> 2018-05-16 18:50 GMT+02:00 Abdel Latif <mlotfi2...@gmail.com>:
>
>> Hi,
>> I am new to Ruby, can you please give me an example of the orders
>> collection ?
>> Thanks.
>>
>> On Wed, May 16, 2018 at 9:45 AM, Matt Jones <al2o...@gmail.com> wrote:
>>
>>>
>>> On May 11, 2018, at 1:10 PM, Alberto Almagro <albertoalma...@gmail.com>
>>> wrote:
>>>
>>> These days I have been comparing records in my daily job lots of times,
>>> which made me think about a better way to retrieve and compare them. When I
>>> want to navigate through several relations in a collection I often see
>>> myself writing code like the following:
>>>
>>> Given orders as a collection of Order:
>>>
>>> > orders.map(&:order_option).map(&:item).map(&:title)
>>>
>>> => ['Foo', 'Bar', 'Baz']
>>>
>>>
>>> That is, chaining maps with Symbol to Proc coercions one after each
>>> other. Sharing my thoughts with my company's architect we came up with the
>>> alternative:
>>>
>>> > orders.map { |order| order&.order_option&.item&.title }
>>>
>>> Very small nitpick: the code above (which tolerates `nil`) isn’t
>>> equivalent to the chained map (which doesn’t). But anyways...
>>>
>>>
>>> But we agreed that the notation was awful and didn't improve what we had
>>> before. With this, I proposed what I think it is more like what we would
>>> expect Ruby to have. I would like to add a notation similar to the one
>>> we can find at Array#dig
>>> <https://ruby-doc.org/core-2.5.0/Array.html#method-i-dig> or Hash#dig
>>> <https://ruby-doc.org/core-2.5.0/Hash.html#method-i-dig> in the
>>> following manner:
>>>
>>> > orders.map(&:order_option, &:item, &:title)
>>>
>>> The method doesn't necessarily need to be named map or collect, we can
>>> agree on a different name for it if you want. Please share your thoughts
>>> with me. If you like this, I would be very happy to write a PR to include
>>> it in Rails.
>>>
>>>
>>> This reminds me of the Elixir function `get_in` and the associated
>>> functions in `Elixir.Access`. I’m not sure if any of the existing methods
>>> would make sense to extend with the behavior, though:
>>>
>>> * `dig` is called on a collection and returns one element with many
>>> levels of nesting
>>> * `pluck` is called on a collection and returns a collection, but only
>>> at one level of nesting
>>> * the proposed function is called on a collection and returns a
>>> collection, with many levels of nesting
>>>
>>> Neither function can guarantee that its arguments are scalars (or even
>>> that they aren’t Procs, for that matter) so extending them is tricky.
>>> Probably better to pick a new name.
>>>
>>> You might also consider “Proc#*” from Facets:
>>>
>>>
>>> https://github.com/rubyworks/facets/blob/master/lib/core/facets/proc/compose.rb
>>>
>>> I haven’t tried it, but in principle this should work if the operator
>>> precedence goes correctly:
>>>
>>>     orders.map(&:order_options * &:item * &:title)
>>>
>>> —Matt Jones
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ruby on Rails: Core" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to rubyonrails-core+unsubscr...@googlegroups.com.
>>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>>> Visit this group at https://groups.google.com/group/rubyonrails-core.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Ruby on Rails: Core" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/rubyonrails-core/22K3pcKEZZU/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to
>> rubyonrails-core+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>> Visit this group at https://groups.google.com/group/rubyonrails-core.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
Alberto Almagro
Senior Ruby on Rails engineer | www.albertoalmagro.com

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to