2011-01-20 2 views
0

Основываясь на моем приложении, мне нужно захватить пользователей на основе набора условий.рельсы - строить запросы, объединяя их?

@usersSet1 = XXX based on a bunch of conditions 

@usersSet2 = XXX based on a bunch of different conditions 

@usersSet3 = XXX based on a bunch of even more different conditions 

Затем я хочу объединить 3 и принять 100 лучших записей. Любые мысли о том, как это сделать с Rails? спасибо

+0

Как вы хотите совместить их? Добавлять, заказывать, что? – Jimmy

ответ

3

Вы должны определить областей в модели:

# model 
scope :set1, where(some_conditions), ... 
scope :set2, where(some_conditions), ... 
scope :set3, where(some_conditions), ... 
scope :top_100, limit(100) 

Дайте те пулы соответствующие имена. И, конечно, вам нужно order что-то. Тогда вы можете позвонить:

@usersSet1 = User.set1 
@usersSet2 = User.set2 
@usersSet3 = User.set3 

@usersset123 = User.set1.set2.set3.top_100 

Это будет AND все условия ТАБЛИЦЫ1, set2 и SET3.

+0

Это очень здорово! Спасибо – AnApprentice

+0

Это круто, я не знал о их цепочке – jschorr

+0

Ок, получается, что это не работает, потому что каждая область добавляется в SQL так: SET 1 = XXX, И установите 2 = x, И установите 3, где мне нужно ИЛИ НЕ И. идеи? – AnApprentice

-1

Лучший способ - сделать один запрос SQL, отбрасывая поля, которые имеют эти условия. Например:

@users = User.all(select => "city,state,last_name,first_name,…", :limit => 100) 

Теперь у вас есть все столбцы. Таким образом, вы переходите к:

@usersSet1 = @users.select{|a| a.state == 'Charlotte' && a.state == 'NC') #pulls back users in Charlotte 
@usersSet2 = @users.select{|b| b.last_name == 'Smith' } #pulls back users that have the last name of Smith. 
@usersSet3 = @users.select{|b| b.first_name == ('John' || 'Joe') } #pulls back users that have the first name of John or Joe. 

И так далее ... Это, на мой взгляд, гораздо более масштабируемо.

+0

Спасибо, но проблема здесь в том, что для каждого запроса нужна другая таблица для логики. например, разрешения и т. д. – AnApprentice

+0

Извините, я неправильно понял. – jschorr

Смежные вопросы