我有一个具有has_many关联的Rails模型
Class Car
has_many parts
和第二个零件模型
Class Part
has_many prices
我有一个特定的汽车实例
myCar = Car.find 5
我想获取该实例的所有价格
myCar.all_prices
答案 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