ruby-on-rails 如何加入一个类的self列是jsonb类型

um6iljoc  于 2023-08-08  发布在  Ruby
关注(0)|答案(1)|浏览(124)

我有一个名为'School'的类,其模式如下

table "school" do |t|
  t.uuid "school_name"
  t.string "city"
  t.jsonb "students"
end

字符串
上表的student列是jsonb类型。目前我的table看起来是这样的-
School table
现在,我想以这样的方式执行连接,我有以下形式的记录-
Desired result
我可以用 snowflake 中的展平功能来实现这个-
第一个月
如何在psql或rails中的Active record中实现此操作
我尝试了不同的交叉连接,但它没有工作。我一直在努力,因为5小时,以获得理想的结果,但我仍然面临这个问题。

8qgya5xd

8qgya5xd1#

为了更好地Map真实世界条件,应更改表设计。一个城市可能有很多学校,一所学校可能有很多学生。因此,适当的关系是:

class City < ApplicationRecord
  # has columns: id, name
  has_many :schools
end

class School < ApplicationRecord
  # has columns id, city_id, name
  belongs_to :city
  has_many :students
end

class Student < ApplicationRecord
  # has columns id, school_id, name, date_of_birth
  belongs_to :school
end

字符串
那么产生所需结果的查询是:

# student.rb
def self.list_all
  select("students.name, students.date_of_birth, schools.name, schools.id, city.name").
  joins(school: :city)
end


顺便说一句,存储学生的年龄是没有意义的,b/c它会随着时间而变化,如果你想在你的视图中显示,从date_of_birth开始计算它。

相关问题