рельсы - сборка запросов, объединение их? - PullRequest
0 голосов
/ 21 января 2011

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

@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?спасибо

Ответы [ 2 ]

3 голосов
/ 21 января 2011

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

# 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 все условия в set1, set2 и set3.

0 голосов
/ 21 января 2011

Лучший способ - выполнить один 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...