Ruby on Rails
Tuesday, April 24, 2012
On 24 April 2012 20:32, Rafael C. de Almeida <almeidaraf@gmail.com> wrote:
I insist on includes():On Apr 24, 3:24 pm, Rogerio Medeiros <arge...@gmail.com> wrote:Yes, that was the best approach I found, but it's still not the best,
> phones = [{area_code:'31', number:'32210412'},
> {area_code:'32', number:'32210412'}]
>
> lawyers = []
> phones.each do |phone|
> lawyer << Lawyer.joins(:phones).where('phones.area_code = ? and
> phones.number ', phone.area_code, phone.number)
> end
since it makes several SQL queries instead of only the one needed. I
guess active record just isn't flexible enough to create a query such
as select * from phones where (area_code, number) in (('555',
'1234564'), ('533', '12345678')). Maybe that is not supported by all
databases that activerecord supports? I think that approach is
probably the best way to go for now. I was just hoping someone would
come up with something which looks like .where([:area_code, :number]
=> [['31','322210412'], ...]).
I have a lot of experience with SQL, but not much with activerecord.
That's why the activerecord solution strikes me as a bit odd. The
runtime of the multiple queries against the single one probably won't
be too different if I have (area_code, number) index.
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Lawyer.includes(:phones).where("(phones.area_code in (:area_codes) and phones.number = :phone_no)", :area_codes => [31, 32], :phone_no => ' 322210412 ')
Or, if phone nos. are different:
phones = [['31', '32221'0412'], ['32','422020202']].map{|q| "phones.area_code = #{q[0]} and phones.number = #{q[1]}"}.join(' or ')
Lawyer.includes(:phones).where(phones)
Regards.
-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment