mysql - Rails 中具有不同列值的所有记录的组合

标签 mysql ruby-on-rails

我对 Ruby on Rails 还比较陌生。我正在使用 Rails 4.0.4。我有一个表“Schedule”,其中有一列标题为“:course_id”。我想在一个名为“行程”的新表中找到不同类(class)的所有组合。

因此,如果有一个时间表,其中包含由 2 门不同类(class)组成的 3 个部分,则每个组合都将是 2 门不同类(class)的唯一组合。

例如: 时间表 1 有:{section_id:4,course_id:1},{section_id:5,course_id:1},{section_id:6,course_id:2}

这将返回 2 个行程: 行程1:{section_id:4,course_id:1},{section_id:6,course_id:2}
行程2:{section_id:5,course_id:1},{section_id:6,course_id:2}

下面是我的模型及其连接的列表。

时间表:

class Schedule < ActiveRecord::Base
    has_many :sections
    has_many :courses, through: :sections
    has_many :subjects, through: :courses
end

部分:

class Section < ActiveRecord::Base
    belongs_to :courses
    belongs_to :schedule
end

类(class):

class Course < ActiveRecord::Base
    belongs_to :subject
    belongs_to :schedule
    has_many :sections
end

在我的 Schedules_controller 中,我有一个方法可以访问从所有可用的不同部分构建的时间表,这就是我正在努力寻找好的方法或方式的地方。我可以循环遍历每个不同类(class)的所有部分并手动进行这些组合,但似乎应该有一些更直接的方法来完成这样的事情。

def get_itineraries
    schedules = Schedule.all
end

最佳答案

嗯,看来你需要 n 个数组的笛卡尔积(6,不是吗?)

为了不必重新编程,您可以使用现有的 gem:

gem 'cartesian'

您需要在您的 application.rb 中要求这个

require 'cartesian'

如果我没猜错的话,你的 course_ids 数量是有限的,6,不是吗?

因此,请执行以下操作:

itineraries=Array.new
(1..6).each do |i|
    itineraries[i]=Schedule.select(:section_id).where("course_id=?",i).uniq.map(&:section_id).sort
end

这里有 6 个数组,每门类(class)都有不同的部分。

之后,您可以按如下方式使用笛卡尔积:

all_itineraries=itineraries[1].x(itineraries[2]).x(itineraries[3]).x(itineraries[4]).x(itineraries[5]).x(itineraries[6])

该数组的每一行将包含 6 个 section_ids,第一个代表 course_id=1,第二个代表 course_id=2 等等。

这严格来说是一种数学方法,以防您找不到更“railsie”的方法......

关于mysql - Rails 中具有不同列值的所有记录的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450001/

相关文章:

ruby-on-rails - 如何从Rails的elasticsearch中删除不存在的文档?

javascript - Rails 在 application.js 中找不到文件

php - 简单 'SELECT field FROM table_name where TO = "$to"' 返回 MySQL 错误 1064

mysql - SqlAlchemy 使用 ORM 截断表

php - 过滤搜索结果的分页

php - 为数据库表自动生成 CRUD UI 的应用程序

ruby-on-rails - 如何使Rails渲染 View 并自动向下滚动?

php - 如何统计整个表中多列出现的次数

ruby-on-rails - 如何检查是否启用了 Rails 5 缓存?

ruby-on-rails - 编码未定义的转换错误 - Ruby on Rails,写入错误