【问题标题】:Rails find query with no duplicatesRails 查找不重复的查询
【发布时间】:2025-11-22 19:55:02
【问题描述】:

如何更改以下代码,以便我只有具有不同 sender_idmessage_id 组合的记录:

@roles = Role.find_all_by_simulation_id(session[:sim_id])
@messages = RolesMessages.find(:all, :conditions => ["sender_id IN (?) ", @roles.map(&:id)], :order => 'created_at DESC')

【问题讨论】:

    标签: sql ruby-on-rails


    【解决方案1】:
    @messages = RolesMessages.find(:all, :select => 'DISTINCT sender_id, message_id', :conditions => ["sender_id IN (?) ", @roles.map(&:id)], :order => 'created_at DESC')
    

    编辑:现在我想到了,group by 可能是一个更好的选择。 :group => 'sender_id, message_id' 可能会更好地满足您的需求

    你也可以这样做:

    RolesMessages.find_by_sql("query goes here") 
    

    (我更喜欢自己进行查询...称我为疯子)

    【讨论】:

    • 所以我意识到这有点老了,但是 find_by_sql 产生一个数组输出而不是 ActiveRecord,这可能不是最好的解决方案。