从嵌套的has_many关联中获取所有条目

时间:2019-06-11 08:36:39

标签: ruby-on-rails

我有一个具有has_many关联的Rails模型

Class Car
has_many parts

和第二个零件模型

Class Part
has_many prices

我有一个特定的汽车实例

myCar = Car.find 5

我想获取该实例的所有价格

myCar.all_prices

4 个答案:

答案 0 :(得分:0)

您可以这样定义它:

Class Car < ApplicationRecord
  has_many :parts
  has_many :prices, through: :parts
end

Class Part < ApplicationRecord
  belong_to :car
  has_many  :prices
end

然后您可以做:

myCar = Car.find 5
myCar.prices

参考:https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

答案 1 :(得分:0)

myCar = Car.find 5

myCar.parts.collect(&:prices)

myCar.parts.includes(:prices).collect(&:prices)-渴望加载

在这里,我们从汽车对象中找到零件,然后使用ruby的collect方法迭代每个零件并返回其价格。

myCar.parts.collect{ |part| part.prices }与上面相同。

答案 2 :(得分:0)

我不知道def adder(x=2, y=3): return x+y adder() # 5 adderEight = lambda y: adder(8, y) adderEight(10) # 18 ,但是假设Price.column_names中有一列value,您应该可以在一个查询中做到这一点:

Price

这使用了active_record_querying#joining-tables

更好(更完整):

Car.joins(parts: :prices).where(cars: {id: 5}).select('prices.value')#.map(&:value)

答案 3 :(得分:0)

因为您想获取prices,所以在编写查询时将其保留为目标。下面的查询将起作用

Price.joins(part: :car).where(cars: { id: 5 })

它生成如下的SQL

SELECT  `prices`.* FROM `prices` INNER JOIN `parts` ON `parts`.`id` = `prices`.`part_id` INNER JOIN `cars` ON `cars`.`id` = `parts`.`car_id` WHERE `cars`.`id` = 5