我想呈现某个类的所有对象,包括在调用控制器的索引操作时的最新关联元素。

这是我的聊天室模型的代码。聊天室可以有许多订户:

class Chatroom < ApplicationRecord
   has_many :subscribers, dependent: :destroy
end


当用户访问起始页面时,他应该看到所有聊天室以及每个聊天室的最新创建的订户(不是最近关联的)。

我的控制器看起来像这样。它不起作用,我很自然地知道,有一种方法可以某种方式限制(:include => :subscribers)命令,例如:

class ChatroomsController < ApplicationController
   # GET /chatrooms
   def index
      @chatrooms= Chatroom.all.includes(Subscriber.where("subscriber.created_at < ?", Time.now).order('created_at DESC').first)
      render json: @chatrooms
   end
end


我很难找到有关如何选择正确的订户对象的解决方案。您能帮我解决这个问题吗?

最佳答案

如果您想为每个聊天室快速加载最新的关联订户,可以将具有范围的has_one关联添加到您的Chatroom模型中:

class Chatroom < ApplicationRecord
   has_many :subscribers, dependent: :destroy
   has_one :latest_subscriber, -> { order(created_at: :desc) }, class_name: 'Subscriber'
end


并包括:

@chatrooms = Chatroom.includes(:latest_subscriber).all



用户访问起始页时,他应该看到所有聊天室和
最近创建的订户(不是最近的订户
相关)。


要加载一个最近创建的订户,而不与特定的聊天室关联,则应使用单独的查询。例如:

@most_recent_subsciber = Subscriber.order(created_at: :desc).first


然后,只需构建由chatrooms数组组成的JSON-response,即可分别呈现它们,还可以呈现每个聊天室的最新订户(if you include it in render json)和最近创建的订户。

关于ruby-on-rails - Rails API-将.includes()结果限制为最新创建的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48965585/

10-12 23:29