代码之家  ›  专栏  ›  技术社区  ›  mfaorlkzus

Rails API-限制。仅将()结果包含到最新创建的记录

  •  1
  • mfaorlkzus  · 技术社区  · 7 年前

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

    这是我的聊天室模型的代码。聊天室可以有多个订阅者:

    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
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Maksim Kalmykov    7 年前

    如果您想急切地加载最新的 相关 每个聊天室的订户,您可以添加 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
    

    然后只需构建JSON响应,该响应将由聊天室数组组成,以单独呈现它们,并能够呈现最新的订阅者( if you include it in render json )对于每个聊天室和最近创建的订阅者。