Rails - два запроса, объединяющие их без SCOPES - PullRequest
3 голосов
/ 22 января 2011

С учетом двух запросов, таких как:

@users1 = Users.find_by_company_id(2)
@users2 = Users.find_by_office_id(2)

Я хочу объединить два:

@users_to_show = @users1 + @users2

Вопрос заключается в том, как предотвратить отображение дублированных пользователей.Есть ли способ объединить два (массив?) И затем убедиться, что дублирующиеся записи удалены?

Спасибо

ОБНОВЛЕНО:

# This QUERY gives all of a user's project members, people they work with
@project_ids = @projects.map(&:project_id)

@users = User.find_by_sql [
                            "SELECT DISTINCT users.*
                            FROM users 
                              INNER JOIN permissions ON permissions.user_id = users.id 
                            WHERE project_id IN (?) AND permissions.user_id != ?
                            UNION ALL
                            SELECT DISTINCT users.*
                            FROM users
                            WHERE instance_id = ?",
                            @project_ids, current_user.id, current_user.instance_id
                          ]

1 Ответ

2 голосов
/ 22 января 2011

Это ручной подход SQL, который может работать для вас:

@users = User.find_by_sql("
     SELECT DISTINCT * FROM USERS WHERE [Place your First complicated where clauses Here]
     UNION
     SELECT * FROM USERS WHERE instance_id = ?
", current_user.instance_id)

РЕДАКТИРОВАТЬ : UNION упростит дублирование записей между двумя запросами.

EDIT : убедитесь, что каждый из запросов не создает дубликатов независимо.Union не будет удалять дубликаты внутри отдельных запросов.

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