首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails uniq公共活动

Rails uniq公共活动
EN

Stack Overflow用户
提问于 2015-05-23 11:00:57
回答 1查看 273关注 0票数 8
代码语言:javascript
复制
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}"}

在我的数据库中,我有"Trackable_type"+"trackable_id“的重复条目,因为如果用户多次单击"update”,我就会得到许多条目。所以,我只想买一个。我和.uniq{|a| "#{a.trackable_type}-#{a.trackable_id}"}试过

但什么都没发生。

返回的SQL查询:

“从活动中选择不同的\”活动\“.*\”())活动\“.\”trackable_type\“=‘trackable_type\’和‘.\’trackable_id\‘IN (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、(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\=“WallPost”和“.\”trackable_id\ IN (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\=‘.\’trackable_id\ (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)或“活动\”.\“trackable_type\”=‘.\’trackable_id\‘IN (8、1、5、7)或“活动\”.\“trackable_type\”=’trackable_type\‘和\“活动\”.\“trackable_id\”(14,11、4、5、6、3、2、1)由id DESC发出的命令“

更新:

如果我试着:

代码语言:javascript
复制
@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")

我明白了:

更新2

如果我试着

代码语言:javascript
复制
@activities = PublicActivity::Activity.select("DISTINCT ON(trackable_type, trackable_id) *")

我得到了

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-25 13:30:32

没有arel的查询将是:

代码语言:javascript
复制
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)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30411900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档