Sorry for the late response. This seems to be exactly what I need. Thanks
again for the thorough support!

2016-06-21 19:05 GMT+02:00 Jeremy Evans <[email protected]>:

> On Tuesday, June 21, 2016 at 8:12:31 AM UTC-7, Tiago Cardoso wrote:
>>
>> This might be a design decision, and I'd like to understand it before
>> perceiving it as a bug. Here is my script:
>>
>> require 'sequel'
>> require 'logger'
>>
>> DB = Sequel.sqlite
>> DB.loggers = [Logger.new(STDOUT)]
>> Sequel::Model.db.extension(:pagination)
>>
>> DB.create_table? :cars do
>>   primary_key :id
>> end
>> DB.create_table? :wheels do
>>   foreign_key :car_id, :cars
>>   column :number, Integer
>> end
>>
>> class Car < Sequel::Model
>>   one_to_many :wheels
>> end
>> class Wheel < Sequel::Model
>>   many_to_one :car
>> end
>>
>> puts "database is set..."
>>
>> 3.times do
>>   car = Car.create
>>   car.add_wheel number: 1
>>   car.add_wheel number: 2
>>   car.add_wheel number: 3
>>   car.add_wheel number: 4
>> end
>>
>> puts "eaching:"
>> Car.eager(:wheels).map(&:wheels)
>> puts "with .all: "
>> Car.eager(:wheels).all.map(&:wheels)
>> puts "with .pagination: "
>> Car.eager(:wheels).paginate(1, 4).all.map(&:wheels)
>>
>> DB.drop_table :wheels, :cars
>>
>>
>> if you look at the db logs, you see that associations are only eager load
>> by explicit call to .all . I don't understand why, because if I explicit
>> pass to a dataset that it has to eager load an association to its models, I
>> expect them to be eager loaded as soon as I start iterating on them. If I
>> don't call .all, it effectively breaks the eager chainability.
>>
>
> Only eager loading if #all is called is the expected and documented
> behavior.  You cannot eager load without having all rows up front. If you
> really want to eager load without having to call #all, you can use the
> eager_each plugin, which makes #each call #all for eagerly loaded datasets.
>
>
>> You might have good reasons for not introducing it, but think about this
>> use case: I want to paginate the collection. I usually render the list of
>> elements in html and add the pagination buttons in the end. If I keep the
>> paginated collection in a variable, I have access to the pagination
>> extension methods, like total_pages, and kaminari/will_paginate work out of
>> the box, but iterating on the collection breaks eager call. If I paginate
>> then call all, I have the collection page eager loaded into an array with
>> the association eager loaded, but the object doesn't contain the pagination
>> extensions, thereby crashing will_paginate/kaminari integration.
>>
>
>
>> My workaround is to keep 2 instances in memory (the eager loaded and the
>> pagination plugin extended), which while working, doesn't seem very
>> convenient.
>>
>
> The eager_each plugin may work for such cases.  I haven't used
> will_paginate/kaminari and unfortunately can't provide any specific
> guidance for them.  With Sequel's pagination extension, you would just call
> #all on the dataset returned by #paginate.
>
> Thanks,
> Jeremy
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sequel-talk" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sequel-talk/cEnWeLP_L3Y/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sequel-talk.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to