我正在尝试为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 users
。id
= posts
。user_id
INNER JOIN {{1 } {} {}} groups_users
= groups_users
。user_id
内部加入users
ON id
。groups
= {{1} }。groups
WHERE(id
。groups_users
IN(1,2))LIMIT 30 OFFSET 0
我更新了我的帖子以包含生成的SQL。问题是如果用户属于2组而不是我得到重复的结果。是不是有办法“区分”结果?
答案 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
时,我得到了明显的结果