Как сгруппировать результаты на основе информации, найденной (или не найденной) в другой таблице? - PullRequest
0 голосов
/ 27 января 2011

Извините, если это простой вопрос, мне не очень повезло с условиями поиска, которые я использовал ...

В моем проекте rails 3 у меня есть модели Project, User и UserProjectRole.

a У пользователя есть много проектов, а также роль для каждого проекта, определенного в UserProjectRole (который содержит идентификатор_пользователя, идентификатор_проекта и роль).

Существует 2 роли: редактори вести.

Если я хочу сгруппировать список проектов, чтобы current_user сначала увидел список проектов, которые он возглавляет, проекты, которые они могут редактировать, и вторые, а также проекты, для которых у них нет роли в списке в последнюю очередь, как это сделать?Я так делаю?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 27 января 2011

Вот один из методов:

select project, decode(sort, 1, 'LEAD', 2, 'EDITOR', 'Not Assigned') role
from (
select project, role, case when user_id = <current_user_id> and role = 'LEAD' then 1
                           when user_id = <current_user_id> and role = 'EDITOR' then 2
                           else 3 end sort
from UserProjectRole
) order by sort, project;
0 голосов
/ 27 января 2011

Может быть, передать опцию "заказать" найти?

User.projects.find(:all, :order => 'role_id')

Или, если вы хотите получить более конкретную информацию о том, как вы их отображаете, вы можете разбить его на 3 отдельных поиска для каждого типа

User.projects.find(:all, :conditions { :role_id => 0 })

User.projects.find(:all, :conditions { :role_id => 1 })

User.projects.find(:all, :conditions { :role_id => 2 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...