gpt4 book ai didi

mysql - Rails ActiveRecord 与数组连接

转载 作者:行者123 更新时间:2023-11-29 19:34:44 26 4
gpt4 key购买 nike

我试图在我的 Rails 应用程序中创建一个 ActiveRecord 查询,该查询涉及两个表的内部联接,尽管我试图联接的记录之一是序列化数组(字符串)。例如,我总共有三张 table 。这些关联如下所示:

  • 汽车:

    serialize :categories_id, Array
    belongs_to :postings
    belong_to :categories
  • 类别:

    has_many :cars
    has_many :postings, through: :cars
  • 发帖

    has_many :categories, through: :cars
    has_many :cars

这是我的汽车表(注意数组):

select cars.* from cars

id: 23,
posting_id: 10,
categories_id: [1, 5, 20]

这是我的类别表:

select categories.* from categories

id: 20,
name: "BMW"

这是我的帖子表:

select postings.* from postings

id: 20,
title: "First title",
description: null,
value: "open"

我想要创建的联接与此类似:

select categories.* from categories inner join cars on categories.id = 
cars.categories_id where cars.posting_id = 20

但现在它没有返回任何结果,因为 cars.category_id 上的连接是一个数组。我基本上想从 cars 表中的 categories_id 列返回所有关联的categories。关于如何做到这一点有什么想法吗?

最佳答案

Official document for ActiveRecord 序列化器指定序列化属性将作为 YAML 保存在数据库中。当您保存记录或获取记录时,属性的序列化和反序列化为正确的类型(在您的情况下为数组)发生在 ruby​​ activerecord 层上,而不是在数据库层上作为数组处理。这是使用序列化属性的缺点,我们只能加载和保存数据。

您可以使用 cars_categories 表通过新的关联 has_and_belongs_to_many 规范化您的数据,以支持您的用例。 cars_categories 表可以帮助您通过关系使用。

汽车

belongs_to :postings   
has_many :cars_categories
has_many :categories, through: :cars_categories, :source => :category

类别

has_many :postings, through: :cars
has_many :cars_categories
has_many :cars, through: :cars_categories, :source => :car

希望这有帮助。

请引用此answer也是如此。

关于mysql - Rails ActiveRecord 与数组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41605793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com