2010-11-06 16 views
5

ile ilgili koşulların olduğu yerde (yapıştırıcı) Birden fazla karmaşık sorgum var (alt sorgular, vb ... kullanarak) ve OR veya AND ifadesi ile bunları yapıştırmak istiyorum. ÖrneğinOR veya AND (Arel, Rails3)

:

where1=table.where(...) 
where2=table.where(...) 

benim için çalışmıyor

where3=where1.or where2 

Sonraki örneğe benzer istiyoruz çünkü: I

users.where(users[:name].eq('bob').or(users[:age].lt(25))) 

(nerede birkaç var. .) sorgular ve onları ile birleştirmek istiyorum. - Veya birleştirme birinci burada, ikinci ikinci, üçüncü ilk: Diğer bir deyişle

olarak

I 3 yöntem.

Ben KURU

cevap

2

formun aradığınız kod benim uygulamada3 yöntemleri kullanmak ve tasarruf edebilmek olmalıdır:

users.where(users[:name].eq('bob').or(users[:age].lt(25))) 

docs: https://github.com/rails/arel

+0

Konuya soru yanıtını ekledim ... –

0

I AND bitiştirme için şunu yapabilirsiniz:

users = User.where(:name => 'jack') 
users = users.where(:job => 'developer') 

ve Bunun dışında

Yapabileceğiniz AND SQL (sonunda #to_sql ile deneyin) bir birleştirme olsun:

where1=table.where(...) 
where2=table.where(...) 
where1 & where2 

örnek:

(User.where(:name => 'jack') & User.where(:job => 'dev')).to_sql 
=> "SELECT `users`.* FROM `users` WHERE `users`.`name` = 'jack' AND `users`.`job` = 'dev'" 
1

kullanıcılar .where (kullananlar [: name] .eq ('bob'). veya ([: age] .lt (25))) yakındır, ancak sütunları belirtmek için arel_table'ı almanız gerekir.

t = User.arel_table 
User.where(t[:name].eq('bob').or(t[:age].lt(25))) 
İlgili konular