gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中管理 3 个多对多模型

转载 作者:行者123 更新时间:2023-12-04 06:07:31 26 4
gpt4 key购买 nike

我正在关注 Railscast制作不同模型维护的建议many-to-many关系。但是,我在提取传递关系数据时遇到问题。

假设有 3 个多对多模型:User <-> Color <-> Shades

我又制作了 2 个模型:

ColorLiking (maintains User <-> Color), DiffShades (maintains Color <-> Shades)

问题现在,如果一切设置正确...我如何找到 Shades属于 User

我将如何建立这种关系?

class User < ActiveRecord::Base
has_many :shades, :through=>:diffShades, :source => :color
end

上面的似乎不起作用......

使用 SQL 可以执行以下查询:

select * from shades 
where id in (select shade_id from diffshades
where color_id in (select color_id from colorlikings
where user_id = ?))

最佳答案

这是空气代码,可能至少部分错误,但可能有助于让您进行富有成效的调查。

长话短说,ActiveRecord 不会让您一直使用各种 :has 和 :belongs 调用的 User.shades 方法。但是自己写模型方法来做也不是太可怕。

class User < ActiveRecord::Base
has_many :color_likings
has_many :colors, :through => :color_likings

def get_shades
colors.collect {|c| c.shades.to_a}.flatten
end
end

class ColorLiking < ActiveRecord::Base
belongs_to :user
belongs_to :color
end

class Color
has_many :color_likings
has_many :users, :through => :color_likings
end

class DiffShade
belongs_to :color
belongs_to :shade
end

class Shade
has_many :diff_shades
has_many :colors, :through => :diff_shades
end

关于ruby-on-rails - 如何在 Rails 中管理 3 个多对多模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568528/

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