【问题标题】:rails modelA has_many modelB, modelB habtm modelC, how to display the modelAs associated with a single modelC?rails model has_many model B,model habtm modelC,如何显示modelAs关联到单个modelC?
【发布时间】:2014-05-29 13:20:35
【问题描述】:

不一定是has_many,但可能是这样?

  • 假设 modelA = 汽车品牌
  • 假设 modelB = 模型
  • 假设 modelC = Features

所以我从以下内容开始:

class CarMake < ActiveRecord::Base
  has_many :models
end

class Model < ActiveRecord::Base
  belongs_to :car_make
  has_and_belongs_to_many :features
end

class Feature < ActiveRecord::Base
  has_and_belongs_to_many :models
end  

我的连接表正确,并且 CarMakes 和模型的所有 RESTful 方法都可以正常工作,我可以将功能添加到模型并正确保存。

我想要做的是显示一个功能(它具有名称、成本等属性)并列出所有具有该功能的汽车制造商,无论它属于什么型号,我不'不想列出模型,只列出汽车制造商,这可能吗?

CarMake 与模型具有一对多的关系。模型和特征具有多对多关系,但该关系不需要属性或回调。间接地,CarMake 与 Features 具有多对多的关系,所以也许我应该通过 Models 将它作为 CarMake has_many Features 来做?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 has-many-through has-and-belongs-to-many


    【解决方案1】:

    您仍然需要检查每个模型以获得给定的功能才能获得 car_makes 列表。这可能会导致重复的列表,所以.uniq 再次过滤掉它们:

    feature.models.map(&:car_make).uniq
    

    如果您按照您的建议声明has_many :through 关联(使用uniq: true),您可以简单地这样做:

    feature.car_makes
    

    ActiveRecord 会生成适当的 SQL 查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2014-09-20
      • 2012-11-01
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多