坎康& many_to_many协会

时间:2011-09-27 13:27:34

标签: ruby-on-rails-3 many-to-many cancan

我正在尝试为many_to_many关联编写规则。由于关联表,一些结果是重复的。

我能力的代码是: 我有很多用户有很多组,我想要显示他们的作者属于与current_user组相同的组的所有帖子。 可以:阅读,发布,:用户=> {:group => {:id => user.groups.collect {| g | g.id}}}

我从日志中获取生成的SQL并在MySql查询生成器中运行它。重复出现在SQL级别。

如何摆脱重复的结果?!

更新1:

生成的SQL: 选择posts。* FROM posts INNER JOIN users ON usersid = postsuser_id INNER JOIN {{1 } {} {}} groups_users = groups_usersuser_id内部加入users ON idgroups = {{1} }。groups WHERE(idgroups_users IN(1,2))LIMIT 30 OFFSET 0

我更新了我的帖子以包含生成的SQL。问题是如果用户属于2组而不是我得到重复的结果。是不是有办法“区分”结果?

3 个答案:

答案 0 :(得分:0)

您可以在返回组ID后尝试使用uniq Array方法。

答案 1 :(得分:0)

而不是:

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

尝试:

can :read, Post, :user => {:group => { :id => user.groups.map(&:id).uniq } }

答案 2 :(得分:0)

我决定使用命名范围来获取我的查询的DISTINCT结果。

我将此添加到post.rb: named_scope :unique_posts, :select => "DISTINCT 'posts'.*"

现在,当我打电话给@ posts.unique_posts

时,我得到了明显的结果