gpt4 book ai didi

ruby-on-rails - 如何加入 Rails 中的多对多表

转载 作者:行者123 更新时间:2023-12-05 08:00:48 24 4
gpt4 key购买 nike

我有具有多对多关系的模型 A 和模型 B,因此我有一个第三表(比如 C),每个表都保存信息。我正在使用 MySql。

所以我的模型是这样的:

class a < ActiveRecord::Base
has_many :c
end

class b < ActiveRecord::Base
has_many :c
end

class c < ActiveRecord::Base
belongs_to :a
belongs_to :b
end

当然,c 包含 a_id 和 b_id 的列。这是现有的模型。

现在我需要一个新的模型类,其中包含 a_id 和 b_id(出于复杂的原因,它需要 a 和 b 而不是 c,因为它需要 a 和 b 的所有现有和 future 的 C 条目,例如)。

class d < ActiveRecord::Base
...
belongs_to :a
belongs_to :b
end

我的问题是关于如何创建一个也将 c 加入其中的查询(这是为了在迭代结果和访问 c 时允许过滤并减少 SQL 查询的数量)。

如何执行此类查询?
我想我知道如何开始,但不知道如何结束..

D.where(<something>).includes(:a).includes(:b).joins(??????????)

谢谢

最佳答案

有两种方法可以做到这一点:


有_many_through:

http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

使用这种方法,您只有两个模型,没有中间模型。
请注意,数据库有一个连接表,并且需要创建它的迁移。
它将有两个字段,每个字段都是对应模型/表的外键。
这是基本的方法。与许多关联一样,实际的外键由 Rails Actvie Record 组件填充,该组件查看模型之间的关系并确定在键、额外记录等方面需要什么。这是配置的约定,也知道作为 rails 的“魔法”。小心复制模型/表键或记录(“偏离 rails ”)并让 rails 为您管理。


has_and_belongs_to_many

实现此目的的另一种方法是使用在中间包含连接模型的 has_many_through。
这里有详细说明:
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
使用这种方法,您有一个中间连接表,您可以向其中添加其他字段。我发现在应用程序生命中的“稍后”,通常希望向连接表添加 bool 字段或时间戳(例如,您可以轻松地选择“今天连接”,因此从一开始就有 has_many_through,甚至如果不是严格需要,可以在以后轻松添加字段而无需重写关系。


关于ruby-on-rails - 如何加入 Rails 中的多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318517/

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