Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >预加载连接多个值的记录

预加载连接多个值的记录
EN

Stack Overflow用户
提问于 2021-04-02 15:43:46
回答 1查看 34关注 0票数 0

我有一个应用程序,可以帮助网球运动员找到对手。我有以下模型:

TennisMatch (id, description, user_id)

User (id, name, type)

AvailabilityWindow(tennis_match_id, start_time, end_time, requester_id)

用户可以使用该应用程序发布网球比赛列表。作为其中的一部分,他们必须提供一些可用性。例如,如果他们想在周六上午8点到10点之间比赛。这将创建一个可用性记录作为创建匹配的一部分:

AvailabilityWindow.new(tennis_match_id: 1, start_time: '8am Saturday', end_time: '10am Saturday', requester_id: user.id)

如果其他玩家看到列表,他们可以接受并同意在建议的时间和日期玩游戏。他们还可以建议其他可用性,这将导致向AvailabilityWindow表中添加一条记录。因此一场网球比赛可以有来自多个不同用户的多个availability_window记录。

我的问题是:我需要一个页面,列出所有网球比赛以及创建列表的用户建议的可用性(忽略其他用户建议的可用性)。例如

代码语言:javascript
运行
AI代码解释
复制
class TennisMatch < ApplicationRecord
   has_many :availability_windows
end
代码语言:javascript
运行
AI代码解释
复制
class TennisMatchController < ApplicationController
  def index
    @tennis_matches = TennisMatch.all
  end
end

index.html.erb:

代码语言:javascript
运行
AI代码解释
复制
<% @tennis_matches.each do |match| %>
  <h4><%= match.description %>
  <% match.availability_windows.where(requester_id: match.user_id).each do |window| %>
    <p><%= window.start_time %>-<%= window.end_time %>
  <% end %>
<% end %>

这是可行的,但会受到n+1的影响,因为它会对每个匹配项进行查询以获得可用性。如何预加载此数据以避免n+1?

我们还假设,简单地在控制器中预加载所有窗口(例如TennisMatch.all.includes(:availability_windows) ),并在视图中的集合上执行select(&block)以避免查询是不可行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-02 16:27:30

试试这个:

代码语言:javascript
运行
AI代码解释
复制
class TennisMatchController < ApplicationController
  def index
    matches = TennisMatch.all
    user_ids = matches.pluck(:user_id)
    @tennis_matches = matches.includes(:availability_windows).
                        where(availability_windows: { user_id: user_ids })
  end
end

然后在index.html.erb中:

代码语言:javascript
运行
AI代码解释
复制
<% @tennis_matches.each do |match| %>
  <h4><%= match.description %>
  <% match.availability_windows.each do |window| %>
    <p><%= window.start_time %>-<%= window.end_time %>
  <% end %>
<% end %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66921796

复制
相关文章
php7.4 preload 预加载 初体验记录
preload的灵感来自于Java HotSpot VM(有人说他越来越像JAVA了),在服务启动时(在运行任何应用程序代码之前),我们可能会将一组特定的 PHP 文件加载到内存中,并使其内容"永久可用"到该服务器将处理的所有后续请求。 这就要求被加载的文件应该是很少改动的,因为不支持热更新(浪费资源去监视热更新),所以改动后必须手动重启php-fpm
躺平程序员老修
2023/09/05
3300
RecyclerView预加载!
列表的内容是由服务器返回的分页数据,每次浏览到当前页的尾部,都会拉取下一页的数据。这中断用户的浏览,不免产生等待。产品希望让这个过程无感知。一种实现方案是预加载,即在一页数据还未看完时就请求下一页数据,让用户感觉列表的内容是无穷的。
用户9239674
2021/12/18
2.5K0
图片预加载
背景 利用图片的预加载技术获得更好的用户体验 什么是有序预加载和无序预加载 jQuery插件的写法 图片预加载,预知用户将要发生的行为,提前加载用户所需的图片 网站loading页 image.png
达达前端
2019/07/16
2.3K0
图片预加载
图片预加载和懒加载
对于前端性能来说,图片是一个过不去的坎,又想能页面美观,又想页面响应速度快,那么这时候就有了两个技术,图片懒加载和预加载。在这边我只介绍一些方法和原理,不具体把方法的代码贴出来。
wade
2020/04/24
2.8K0
Angular 启用预加载
在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块。但这需要一点时间。在用户第一次点击的时候,会有一点延迟。
玖柒的小窝
2021/11/03
1.5K0
Angular 启用预加载
前端懒加载和预加载
懒加载和预加载的目的都是为了提高用户的体验,二者行为是相反的,一个是延迟加载,另一个是提前加载。懒加载对缓解服务器压力有一定作用,预加载则会增长服务器前端压力缓存。
hellocoder2029
2022/10/21
2.2K0
Python学习记录06-字典中的键映射多个值
如果想一个key映射多个value, 我们就需要让value也是一个容器,可以是列表,也可以集合。看具体的使用场景。列表的特性是可以保持顺序,集合的特性是可以去重。 可以用以下的方式来创建一个映射多个value 的字典
huolong
2023/09/07
5570
Vue 图片预加载
在媒体资源较多的情况下渲染页面,即使采用了CDN,但如果客户端受带宽限制,资源的加载会很慢。页面资源(通常是图片)加载慢会影响动画效果,甚至使页面看起来很卡顿。 为了解决这一问题,可以使用预加载的方式,在页面打开之前,提前将其所需的资源加载到浏览器缓存。 在Vue中,可以将预加载的操作放在合适的生命周期钩子函数内,比如在前一个组件挂载后就加载后一个组件所需的资源。以下是Vue3组合式api写法。
Libertyyyyy
2022/11/01
2.5K0
jquery预加载图片
(function($) { var cache = []; // Arguments are image paths relative to the current page. $.preLoadImages = function() { var args_len = arguments.length; for (var i = args_len; i--;) { var cacheImage = document.createElement('img');
用户8671053
2021/09/23
7.8K0
js图片的预加载功能
//单图片预加载 function preloadImg(url) { var img = new Image(); img.src = url; if(img.complete) {//complete记得检查comlete属性 //接下来可以使用图片了 //do something here } else { img.onload = function() { //接下来可以使用图片了
前朝楚水
2018/04/02
7.1K0
laravel 预加载特定的列
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112351.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
7200
laravel 预加载特定的列
Gorm-预加载
预加载是一种在查询之前,先将关联的数据从数据库中加载到内存中的方式。在Gorm中,可以使用Preload方法进行预加载。
堕落飞鸟
2023/04/24
1.9K0
预加载JavaScript/CSS但不执行
好吧,一个方案一个方案来分析一下(要求是不允许执行Javascript和应用CSS,以免消耗系统资源):
meteoric
2018/11/15
2K0
scope='request'的bean预加载冲突
Error creating bean with name ‘authenticationSuccessServlet’: Scope ‘request’ is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; 情景: 我自定义了一个spring security中的Authentication
用户1174983
2018/02/05
9270
JS图片预加载插件
      在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验。  1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。 2)区别: 两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。 服务器端区别:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。预加载可以
用户1055830
2018/01/18
16.9K0
xml布局异步预加载
项目中针对xml布局加载,一般是使用LayoutInflate.from(context).inflate或则View.inflate来进行,其他方式则是直接new XXXView
人力鹿
2022/12/14
2.5K1
使用主题预加载背景
最近在项目中中开发天气,需要加载Lottie动画,但是第一次进入的时候会黑屏之后再进入界面。于是想了不少办法去取消黑屏,发现这是最简单的一种
雁字回时
2022/12/13
5220
4-3~8 code-splitting,懒加载,预拉取,预加载
代码分离是 webpack 中最引人注目的特性之一。此特性能够把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件。代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间。
love丁酥酥
2020/02/25
1.6K0
4-3~8 code-splitting,懒加载,预拉取,预加载
TensorFlow 加载多个模型的方法
采用 TensorFlow 的时候,有时候我们需要加载的不止是一个模型,那么如何加载多个模型呢?
kbsc13
2019/08/16
2.8K0
Angular 路由配置(预加载配置,懒加载配置)
(1)RouterModule对象提供了两个静态的方法:forRoot()和forChild()来配置路由信息。
玖柒的小窝
2021/11/04
3.2K0

相似问题

预填充多个记录

13

JS文件的预加载、预取还是预连接?

22

预加载多个背景

12

如何不用预加载使用GORM连接多个表

13

Ecto查询-预加载多个记录的一个关联对象

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文