Ruby on rails 如何在rails中排序与多个关联?

Ruby on rails 如何在rails中排序与多个关联?,ruby-on-rails,has-many,Ruby On Rails,Has Many,我有一个rails应用程序,包含用户、反思和评论 用户有许多反映、组和评论都属于用户 反思有许多评论评论属于反思 用户应该能够编写反射,并将其添加到他们所在的组中 我试图找到一些用户编写的反射,然后按它们在DESC创建的时间对它们进行排序 然而,我不知道如何利用我现有的联系做到这一点 控制器 def show # Find users in the group @groups = Grouplookup.where(group_id: @group.id) #

我有一个rails应用程序,包含用户、反思和评论

用户有许多反映、组和评论都属于用户

反思有许多评论评论属于反思

用户应该能够编写反射,并将其添加到他们所在的组中

我试图找到一些用户编写的反射,然后按它们在DESC创建的时间对它们进行排序

然而,我不知道如何利用我现有的联系做到这一点

控制器

  def show


    # Find users in the group
    @groups = Grouplookup.where(group_id: @group.id)

    # Turn that group into a user_array
    user_array = []
    @groups.each do |group|
      user_array << group.user_id
    end

    # Select users that are in the user_array
    @users = User.where(id: user_array)

    # HOW DO I SORT THIS @users QUERY BY THE DESC ORDER OF REFLECTIONS??
  end
模板

<% @users.each do |user| %>
  <u><%= user.email %></u>
  <br>

    <!-- Reflection -->
    <% user.reflections.each do |reflection| %>
      <%= reflection.id %>. <%= reflection.reflection %>  (<%= reflection.created_at.strftime("%B %d, %Y") %>)
      <br>

      <!-- Comment -->
      <% reflection.comments.each do |comments| %>
        -"<%= comments.comment %>" - <%= user.email %> <br>
      <% end %>

      <br>
    <% end %>

<% end %>
Group.rb

class Group < ApplicationRecord
    belongs_to :user

  extend FriendlyId
  friendly_id :name, use: :slugged
end
User.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  has_many :reflections, -> { order(created_at: :desc) }
  has_many :comments
  has_many :groups

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end
Grouplookup.rb

class Grouplookup < ApplicationRecord
end

在可以按反射对记录进行排序之后,需要使用联接

@users = User.joins(:reflections).where(id: user_array).order("reflections.created_at DESC").group("users.id")

像这样向反射模型添加一个默认作用域,它应该可以做到这一点

class Reflections < ApplicationRecord

  default_scope order('created_at DESC')
end
你能试试这个吗

array = @groups.pluck(:user_id)
@users = User.includes(:reflections)
             .where(id: array)
             .order("reflections.created_at DESC")

当我这样做时,一些记录不幸地在我的模板中被复制。知道为什么吗?@sharataka更新了答案,你能在组、Grouplookup和用户之间添加关联吗?当我尝试分组时,我得到了ActiveRecord::StatementInvalid。我包含了上述模型的rb文件。PG::SyntaxError:ERROR:syntax ERROR at或near。第1行:…s.id,其中users.id按user.id顺序在1,2组中…^:选择users.*FROM users internal JOIN reflections ON reflections.user_id=users.id WHERE users.id IN 1,2 GROUP BY user.id ORDER BY reflections.created_at descit语法错误,请在此处添加,您写了什么?完整查询?