Ruby on rails Rails uniq公共活动

Ruby on rails Rails uniq公共活动,ruby-on-rails,postgresql,activerecord,rails-activerecord,public-activity,Ruby On Rails,Postgresql,Activerecord,Rails Activerecord,Public Activity,在我的数据库中,我有可跟踪类型+可跟踪id的重复条目,因为如果用户多次单击更新,我会得到许多条目。 所以,我只想买一个。 我试过了 .uniq{a{a.trackable_type}-{a.trackable_id} 但什么也没发生 返回的SQL查询: 从\activities\WHERE中选择DISTINCT\activities\.* \活动\.\trackable_type \=“课程”和 \11、39、40、16、5、3、12、9、13、, 19, 18, 37, 15, 23, 24,

在我的数据库中,我有可跟踪类型+可跟踪id的重复条目,因为如果用户多次单击更新,我会得到许多条目。 所以,我只想买一个。 我试过了 .uniq{a{a.trackable_type}-{a.trackable_id}

但什么也没发生

返回的SQL查询:

从\activities\WHERE中选择DISTINCT\activities\.* \活动\.\trackable_type \=“课程”和 \11、39、40、16、5、3、12、9、13、, 19, 18, 37, 15, 23, 24, 29, 20, 10, 25, 26, 27, 17, 28, 22, 21, 30, 33、35、34、36、32、31或\activities\。\trackable\u type\=“Post” 在50、49、48、47、46、45、44、, 43, 42, 41, 40, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24、23、22、21、20、19、18、17、14、13、12、10、5或 \活动\.\trackable_type \=“墙柱”和 \在158、157、155、154、153、152、151、, 132, 131, 130, 129, 128, 127, 126, 125, 124, 119, 118, 117, 116, 115, 114, 113, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 93, 92, 91, 90, 87, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 37, 36, 35, 34, 33, 31, 30, 29, 28, 27, 26, 25, 24, 22, 20、19、17、16、15、14、13、10、7、6、5、4或 \活动\.\trackable_type \=“评论”和 \100、99、98、95、83、82、81、79、, 78, 71, 70, 69, 68, 67, 65, 63, 62, 61, 60, 59, 58, 57, 56, 55, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17、16、15、14或\activities\。\trackable\u type\=“课程”和 \活动\.\trackable\u id\在8、1、5、7或 \活动\.\trackable_type \=“组”和 \活动\.\trackable\u id\按14、11、4、5、6、3、2、1的顺序排列 按id描述

更新:

如果我尝试:

t = PublicActivity::Activity.arel_table

@activities = PublicActivity::Activity.where(
    (t[:trackable_type].eq("Lesson").and(t[:trackable_id].in(@my_lessons_ids)))
    .or(t[:trackable_type].eq("Post").and(t[:trackable_id].in(@my_posts_ids)))
    .or(t[:trackable_type].eq("WallPost").and(t[:trackable_id].in(@my_wallposts_ids)))
    .or(t[:trackable_type].eq("Comment").and(t[:trackable_id].in(@my_comments_ids)))
    .or(t[:trackable_type].eq("Course").and(t[:trackable_id].in(@my_courses_ids)))
    .or(t[:trackable_type].eq("Group").and(t[:trackable_id].in(@my_groups_ids)))
).order("id DESC").uniq{|a| "#{a.trackable_type}-#{a.trackable_id}"}
我明白了:

更新2

如果我尝试

@activities = PublicActivity::Activity.select("distinct trackable_type, trackable_id").where(
        (t[:trackable_type].eq("Lesson").and(t[:trackable_id].in(@my_lessons_ids)))
        .or(t[:trackable_type].eq("Post").and(t[:trackable_id].in(@my_posts_ids)))
        .or(t[:trackable_type].eq("WallPost").and(t[:trackable_id].in(@my_wallposts_ids)))
        .or(t[:trackable_type].eq("Comment").and(t[:trackable_id].in(@my_comments_ids)))
        .or(t[:trackable_type].eq("Course").and(t[:trackable_id].in(@my_courses_ids)))
        .or(t[:trackable_type].eq("Group").and(t[:trackable_id].in(@my_groups_ids)))
    ).order("id DESC")
我明白了

@activities = PublicActivity::Activity.select("DISTINCT ON(trackable_type, trackable_id) *")
没有arel的查询将是:

PG::SyntaxError: ERROR: syntax error at or near "ON" LINE 1: SELECT COUNT(DISTINCT ON(trackable_type, trackable_id) *) FR... ^ : SELECT COUNT(DISTINCT ON(trackable_type, trackable_id) *) FROM "activities"

试试这个.uniq{a | a.trackable_type&&a.trackable_id}你用的是什么数据库客户端?MySql,Postgresql@sparkle执行此PublicActivity.selectdistinct trackable_type,trackable_id…PG::SyntaxError:ERROR:第1行或附近的语法错误:SelectCountDistinct ONtrackable_type,trackable_id*FR从11,39,40,16,5,3,12,9,13,19,18,37,15,23,24,29,20,10,25,26,27,17,28,22,21,30,33,35,34,36,32,31中的可跟踪类型='Lesson'和可跟踪id的活动中选择COUNTDISTINCT可跟踪类型、可跟踪id*,或在NULLI中选择可跟踪类型='Post'和可跟踪id执行以下操作:PublicActivity::Activity.Selected Distinct可跟踪类型,trackable_id*可能是PublicActivity::Activity?好的,问题出在kaminari身上。有按id排序的方法吗?PG::InvalidColumnReference:错误:表达式上的SELECT DISTINCT必须与初始的order by匹配expressions@sparkle好似乎插入了应用程序中的某个默认范围。阅读对DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。ORDER BY子句通常包含确定每个DISTINCT ON组中所需行优先级的附加表达式。
PublicActivity::Activity.select("DISTINCT ON(trackable_type, trackable_id) *")
              .where("(trackable_type = ? and trackable_id IN (?))
                      or (trackable_type = ? and trackable_id IN (?))",
                      "Lesson", @my_lessons_ids,
                      "Post", @my_post_ids)