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.