Hey everyone, I've obviously done a bad job of explaining this :). Let me try to elaborate.
Suppose I've ran xyz = Model.where(attribute: true) A SQL query is created and executed. The results are saved to xyz as an ActiveRecord_Relation. The query looks something like this: SELECT "models".* FROM "models" WHERE "models"."attribute" = 't' If I run xyz.find_by(attribute2: false), a new SQL query is created and executed and it will hit the database again. The query looks something like this: SELECT "models".* FROM "models" WHERE "models"."attribute" = 't' AND "models"."attribute2" = 'f' LIMIT 1 On the other hand, the proposed find_in_relation is a method on an ActiveRecord_Relation that *doesn't hit the database* and searches the relation in memory. If I type xyz.find_in_relation(attribute2: false), no new sql query is created and it will not touch the database. The code would be equivalent to running: xyz.select { |x| x.attribute2 == false } Ideally, find_in_relation would return another ActiveRecord_Relation. Sunny Juneja On Sunday, November 16, 2014 6:32:15 AM UTC-8, Matt jones wrote: > > On Nov 14, 2014, at 4:05 PM, Sunny Juneja <jr.s...@gmail.com <javascript:>> > wrote: > > > Hey, I ran into this problem fairly recently. I needed to get a large > number of records and search them over and over again on different > attributes. I found myself writing code that looked a lot like this. > > > > records = Model.where(...) > > > > records.select { |r| r.attribute1 == attribute1 && r.attribute2 == > attribute2 && ... } > > > > Although this is a simple case, I found myself rewriting this over and > over again. > > > > Is there anything equivalent that might fit the form > > > > records = Model.where(...) > > records.find_in_relation(attribute1: attribute1, attribute2: attribute2, > attribute3, ...) > > > > Was just wondering if there was a place for such syntactical sugar or a > desire to add some. If there is too simple a change to warrant, I > understand. > > If attribute1, attribute2, etc are database columns then I think `where` > is the same as your `find_in_relation`… > > records = Model.where(...) > records.where(attribute1: attribute1, attribute2: attribute2, attribute3, > …) > > Can you explain further what `find_in_relation` is intended to do > differently? > > —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 http://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.