从另一张表中按行查询订单(ruby rails)

下午好

我有一个复杂的设置。

我正在查询具有Conversations消息线程()的所有用户

我的用户模型has_many在以下两个列上关系Conversation

  has_many :sender_conversations, class_name: 'Conversation', foreign_key: "sender_id", dependent: :destroy
  has_many :recipient_conversations, class_name: 'Conversation', foreign_key: "recipient_id", dependent: :destroy

我需要一种获取最新对话的方法,因为任何用户都可以有多个线程。

为此,我在用户模型上具有以下方法:

 def conversations
   sender_conversations.or(recipient_conversations)
  end

  def latest_conversation
    conversations.order(updated_at: :desc).first
  end

会话模型:

class Conversation < ApplicationRecord
  ...

  belongs_to :sender, foreign_key: :sender_id, class_name: 'User'
  belongs_to :recipient, foreign_key: :recipient_id, class_name: 'User'

  ...

  validates :sender_id, uniqueness: { scope: [:recipient_id, :property_id] }

  scope :between, ->(sender_id, recipient_id) do
    where(sender_id: sender_id, recipient_id: recipient_id).or(
      where(sender_id: recipient_id, recipient_id: sender_id)
    )
  end
...

控制器动作查询,只要使用者无论是sender_idrecipient_id

def users_with_existing_conversations
    authorize! :users_with_existing_conversations, Conversation

    @users = User.accessible_by(current_ability, :index_conversations)

    @users = @users.where(id: Conversation.select(:sender_id))
                    .or(@users.where(id: Conversation.select(:recipient_id)))


    ...




  end

最后,在视图中,我正在遍历

<% @users.each do |user| %>
  <tr class="table__row" onclick="window.location.href = '/conversations?user_id=<%= user.id %>'">
    <td><%= user.name %>(<%= user.id %>)</td>
    <td><%= user.surname %></td>
    <td><%= user.email %></td>
    <td><%= user.company_name.present? ? user.company_name : "N/A" %></td>
    <td><%= user.role.capitalize %></td>
    <td><%= user.created_at.try(:strftime, '%b %d, %Y') %></td>
    <td><%= user.latest_conversation.updated_at.localtime.strftime('%b %d, %Y at %l:%M %p') %></td>
    <td class="table__more">
      <%= link_to "Show details", conversations_path(user_id: user.id), class: 'table__row__details button button--tertiary button--tertiary-small' %>
    </td>
  </tr>
  <% end %>

现在我不知道如何按列(latest_conversationupdated_at列)对这些行进行排序

因此,我有一个要查询的用户表,但我想按其与会话表updated_at的关系来排序查询

Sebastian Palma的图片

您可以INNER JOIN使用IN子句尝试自定义以检查两个conversations'列:

User.joins('INNER JOIN conversations c ON users.id IN (c.sender_id, c.recipient_id)')
    .order('c.created_at')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据Rails中的第一张表数据更新第二张表

来自分类Dev

与同一张表的2个外键有一对多关系Ruby on Rails

来自分类Dev

如何使用ActiveRecord多次联接同一张表(ruby on rails)

来自分类Dev

如何在Rails的同一张表中添加一个以上的About_to

来自分类Dev

Rails Postgresql如何从一张表中获得JOIN?

来自分类Dev

Rails查询:按另一个表中的属性过滤

来自分类Dev

使用一张表中的数据查询另一张表

来自分类Dev

将行输出到另一张表中

来自分类Dev

Rails在不同的动态范围内两次连接同一张表

来自分类Dev

使用查询生成器查询表中与另一张表链接的所有行

来自分类Dev

通过从SQL Server的另一张表中选择行,将所有行一张一张地插入到空表中

来自分类Dev

Ruby on Rails深度订单

来自分类Dev

一张表中的订单类别和子类别

来自分类Dev

如何根据另一张表的值查询一张表?

来自分类Dev

如何使用通过表单参数找到的一个表的结果查询另一个表-Ruby on Rails

来自分类Dev

从另一张表中查询两列值的SQL查询

来自分类Dev

按另一张表中的一列排序

来自分类Dev

根据另一张表中的编号在一张表中插入多行

来自分类Dev

在MySQL中从一张表到另一张表的数据

来自分类Dev

从另一张表中减去一张表

来自分类Dev

搜索中的Ruby on Rails Pluck属性,并使用该属性搜索另一个表

来自分类Dev

从Ruby on Rails的另一个表中获取值

来自分类Dev

Ruby on Rails:计算并存储另一个表中数据的平均值

来自分类Dev

如何使用条件更新表中的行,请参考另一张表

来自分类Dev

从另一台服务器获取另一张表的行详细信息,并将其合并到您的查询中

来自分类Dev

根据另一张表中的行类型选择行

来自分类Dev

当一行在另一张表中匹配时排除组

来自分类Dev

使用相应的唯一ID更新另一张表中数据的行

来自分类Dev

如果一行包含另一张表中的键,则汇总金额

Related 相关文章

  1. 1

    根据Rails中的第一张表数据更新第二张表

  2. 2

    与同一张表的2个外键有一对多关系Ruby on Rails

  3. 3

    如何使用ActiveRecord多次联接同一张表(ruby on rails)

  4. 4

    如何在Rails的同一张表中添加一个以上的About_to

  5. 5

    Rails Postgresql如何从一张表中获得JOIN?

  6. 6

    Rails查询:按另一个表中的属性过滤

  7. 7

    使用一张表中的数据查询另一张表

  8. 8

    将行输出到另一张表中

  9. 9

    Rails在不同的动态范围内两次连接同一张表

  10. 10

    使用查询生成器查询表中与另一张表链接的所有行

  11. 11

    通过从SQL Server的另一张表中选择行,将所有行一张一张地插入到空表中

  12. 12

    Ruby on Rails深度订单

  13. 13

    一张表中的订单类别和子类别

  14. 14

    如何根据另一张表的值查询一张表?

  15. 15

    如何使用通过表单参数找到的一个表的结果查询另一个表-Ruby on Rails

  16. 16

    从另一张表中查询两列值的SQL查询

  17. 17

    按另一张表中的一列排序

  18. 18

    根据另一张表中的编号在一张表中插入多行

  19. 19

    在MySQL中从一张表到另一张表的数据

  20. 20

    从另一张表中减去一张表

  21. 21

    搜索中的Ruby on Rails Pluck属性,并使用该属性搜索另一个表

  22. 22

    从Ruby on Rails的另一个表中获取值

  23. 23

    Ruby on Rails:计算并存储另一个表中数据的平均值

  24. 24

    如何使用条件更新表中的行,请参考另一张表

  25. 25

    从另一台服务器获取另一张表的行详细信息,并将其合并到您的查询中

  26. 26

    根据另一张表中的行类型选择行

  27. 27

    当一行在另一张表中匹配时排除组

  28. 28

    使用相应的唯一ID更新另一张表中数据的行

  29. 29

    如果一行包含另一张表中的键,则汇总金额

热门标签

归档