I disagree with the addition of `all[X]` but isn't `all` supposed to not fire 
the the query and return some kind of ActiveRecord::Relation now ?
If so, the `[]` addition would be made on it and I don't think it would be a 
good thing :/


Simon Courtois


On Friday 19 July 2013 at 13:40, James Coleman wrote:

> The whole point of the `all` method is that it actually fires the query on 
> the current relation. So 1.) a change like this could potentially break a lot 
> of existing code and 2.) it would defeat the point of the method. So I 
> strongly believe that it shouldn't change. If you want the limit/offset 
> query, use those methods. That's why they're there.
> 
> 
> On Fri, Jul 19, 2013 at 12:14 AM, Michael Swan <swanyb...@gmail.com 
> (mailto:swanyb...@gmail.com)> wrote:
> > Your example would involve three queries, each only allocating memory and 
> > transferring content from the DBMS for 1 result, instead of every record in 
> > the table.
> > 
> > In the present:
> > User.all[5] # SELECT "users".* FROM "users" -> 420,000 results
> > 
> > My suggestion:
> > User.all[5] # SELECT "users".* FROM "users" LIMIT 1 OFFSET 5 -> 1 result
> > 
> > If I understand right, every User is pulled from the database, an array is 
> > created with every single possible instance of a User, and then you select 
> > a specific value from that array. I am thinking about this in the context 
> > of any query. If you want the nth result from that query, it would be nice 
> > to have an idiomatic shorthand for that, instead of ".offset(n).first".
> > 
> > It appears that even if you are iterating over the elements in a query in 
> > such a way, my suggestion would improve performance. This has nothing to do 
> > with any of the other functions that are delegated to Array. This is for an 
> > ActiveRecord query that one is looking for the nth element within those 
> > query results.
> > 
> > No one in their right mind would use the delegated '[]' function on a query 
> > that could have thousands of results. But they would call the '[]' function 
> > that I am suggesting.
> > 
> > On Friday, July 12, 2013 1:28:18 PM UTC-4, Olly Smith wrote:
> > > What do you expect to happen if the code looks like this:
> > > User.all[5]
> > > User.all[6]
> > > User.all[7] 
> > > Should ActiveRecord make three separate queries? How about if the code 
> > > iterates from index 100 to 200?
> > > Imho, it's totally acceptable to sacrifice 'idiomatic' ruby in this case 
> > > in favour of fewer accidental gotchas.
> > > Olly
> > > On 12 Jul 2013 17:29, "Michael Swan" <swan...@gmail.com> wrote:
> > > > I am going to make this quick. Try something like: User.all[5]
> > > > Rails presently runs the following query in Postgres: SELECT "users".* 
> > > > FROM "users"
> > > > And then gets the 6th element from the array of results.
> > > > 
> > > > In reality, User.all[5] should be equivalent to: 
> > > > User.limit(1).offset(5).first
> > > > in all circumstances that this addition to the query can be performed.
> > > > This means that someone looking for the nth User, for example, can 
> > > > simply use the brackets as is idiomatic in Ruby, to perform the query 
> > > > which is truly desired by the user.
> > > > -- 
> > > > 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-co...@googlegroups.com.
> > > > To post to this group, send email to rubyonra...@googlegroups.com.
> > > > Visit this group at http://groups.google.com/group/rubyonrails-core.
> > > > For more options, visit https://groups.google.com/groups/opt_out.
> > > >  
> > > >  
> > -- 
> > 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 
> > (mailto:rubyonrails-core%2bunsubscr...@googlegroups.com).
> > To post to this group, send email to rubyonrails-core@googlegroups.com 
> > (mailto:rubyonrails-core@googlegroups.com).
> > Visit this group at http://groups.google.com/group/rubyonrails-core.
> > For more options, visit https://groups.google.com/groups/opt_out.
> >  
> >  
> 
> -- 
> 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 
> (mailto:rubyonrails-core+unsubscr...@googlegroups.com).
> To post to this group, send email to rubyonrails-core@googlegroups.com 
> (mailto:rubyonrails-core@googlegroups.com).
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
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 http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to