ассоциации cancan & many_to_many - PullRequest
       0

ассоциации cancan & many_to_many

1 голос
/ 27 сентября 2011

Я пытаюсь написать правило для ассоциации many_to_many.Из-за таблицы ассоциации некоторые результаты дублируются.

Код в моей способности: у меня много пользователей, у которых много групп, и я хочу показать всем постам, что их автор принадлежит группе, так же как и текущий_пользовательгруппа.можно: прочитать, опубликовать,: user => {: group => {: id => user.groups.collect {| g |g.id}}}

Я взял сгенерированный SQL из журнала и запустил его в конструкторе запросов MySql.Дубликаты появляются на уровне SQL.

Как избавиться от дублированных результатов?!

ОБНОВЛЕНИЕ 1:

Сгенерированный SQL:ВЫБЕРИТЕ posts. * ОТ posts ВНУТРЕННЕЕ СОЕДИНЕНИЕ users ВКЛ users. id = posts. user_id ВНУТРЕННЕЕ СОЕДИНЕНИЕ groups_users ВКЛ groups_users. user_id = users. id INNER JOIN groups ON groups. id = groups_users. group_id WHERE (groups. id IN (1, 2)) LIMIT 30 OFFSET 0

iобновил мой пост, чтобы включить сгенерированный SQL.проблема в том, что если пользователь принадлежит к 2 группам, я получу дублированные результаты.разве нет способа «различить» результаты?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2011

Вместо:

can :read, Post, :user => { :group => { :id => user.groups.collect { |g| g.id } } }

Попробуйте:

can :read, Post, :user => {:group => { :id => user.groups.map(&:id).uniq } }
0 голосов
/ 02 октября 2011

Я решил использовать именованную область для получения результатов DISTINCT для моего запроса.

Я добавил это к post.rb: named_scope :unique_posts, :select => "DISTINCT 'posts'.*"

Теперь я получаю отчетливые результаты, когда звоню @ posts.unique_posts

0 голосов
/ 27 сентября 2011

Вы можете попробовать использовать метод uniq Array после того, как вы вернули идентификаторы группы.

...