Rails 4 - 根据列找到最新的Distinct Record

时间:2015-04-17 19:22:18

标签: mysql ruby-on-rails ruby-on-rails-4

+-----------------+------------+------+-----+---------+----------------+
| Field           | Type       | Null | Key | Default | Extra          |
+-----------------+------------+------+-----+---------+----------------+
| id              | int(11)    | NO   | PRI | NULL    | auto_increment |
| body            | text       | YES  |     | NULL    |                |
| host_id         | int(11)    | NO   | MUL | NULL    |                |
| user_id         | int(11)    | NO   | MUL | NULL    |                |
| order_id        | int(11)    | NO   | MUL | NULL    |                |
| is_read_by_user | tinyint(4) | YES  |     | NULL    |                |
| is_read_by_host | tinyint(4) | YES  |     | NULL    |                |
| status          | tinyint(4) | YES  |     | NULL    |                |
| created_at      | datetime   | YES  |     | NULL    |                |
| updated_at      | datetime   | YES  |     | NULL    |                |
+-----------------+------------+------+-----+---------+----------------+

我有上面的模型messages。订单可以包含多条消息。我想根据订单ID选择最新消息。

  @messages = Message.where(user_id: current_user.id).order('created_at DESC').uniq('order_id').limit(5)
    @messages = @messages.uniq {|p| p.order_id}

1 个答案:

答案 0 :(得分:2)

假设具有最高id的邮件是最新/最新邮件,您可以使用以下内容:

@message_ids = Message.where(user_id: current_user.id).group(:order_id).maximum(:id).values
@messages = Message.find(@message_ids)
相关问题