首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法找到在具有has_many_through关系的Rails 5中显示连接数据的最佳方法

无法找到在具有has_many_through关系的Rails 5中显示连接数据的最佳方法
EN

Stack Overflow用户
提问于 2016-12-21 17:14:51
回答 1查看 28关注 0票数 0

我有三个模特:电影,电影和跑步。电影和电影之间有一种贯穿始终的关系,就像:

代码语言:javascript
复制
class Movie < ApplicationRecord
  has_many :cinemas, -> { distinct }, through: :runs
  has_many :runs
end

我试图展示某些电影的影院列表,并列出每家电影院的放映情况:

电影1

  1. 电影院1
    • 12:30
    • 下午3:00

  1. 电影院2
    • 15:30
    • 16:00

我想不出如何减少数据库调用。现在我正在为每一家电影院打电话,所以它与数量或电影院成正比。在我看来不对

代码语言:javascript
复制
@movie.cinemas.each do |cinema|
   cinema.runs.where(movie_id: @movie.id).each do |run|
      = run.time

在这方面需要帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 17:30:37

您可能需要首先向Run添加关系

代码语言:javascript
复制
class Run < ApplicationRecord
  belongs_to :movie
  belongs_to :cinema
end

然后使用includes并从runs启动循环。

例如:

代码语言:javascript
复制
@movie = Movie.where(... the condition ...).includes(:runs => :cinemas).first
@movie.runs.group_by(&:cinema_id).each do |movie_id, runs|
  <%= runs.first.cinema.name %>
  runs.each do |run|
    <%= run.time %>
  end
end

请注意,

代码语言:javascript
复制
runs.group_by(&:cinema_id) 

的语法糖。

代码语言:javascript
复制
runs.group_by{|run| run.cinema_id }

通过方法的用法示例:

代码语言:javascript
复制
(1..6).group_by {|i| i%3}   #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41268353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档