我希望我能更好地描述这一点,但这是我所知道的最好的。我有两个班级汽车和颜色。每个人都可以通过一个关联类CarColors互相拥有很多。协会设置正确我对此很肯定,但我似乎无法让这个工作:
@carlist = Cars.includes(:Colors).all
@carlist.colors
错误
@carlist[0].colors
WORKS
我的问题是如何在不声明成功示例中的索引的情况下迭代@carlist?以下是我尝试过的一些事情也失败了:
@carlist.each do |c|
c.colors
end
@carlist.each_with_index do |c,i|
c[i].colors
end
答案 0 :(得分:1)
您的第一个示例失败,因为Car.includes(:colors).all
会返回一系列汽车,而不是一辆汽车,因此以下情况会失败,因为没有为数组定义#colors
@cars = Car.includes(:colors).all
@cars.colors #=> NoMethodError, color is not defined for Array
以下方法有效,因为迭代器将有一个car实例
@cars.each do |car|
puts car.colors # => Will print an array of color objects
end
each_with_index
也可以,但它有点不同,作为第一个对象
与每个循环汽车对象相同,第二个对象是索引
@cars.each_with_index do |car, index|
puts car.colors # => Will print an array of color objects
puts @cars[index].colors # => Will print an array of color objects
puts car == @cars[index] # => will print true
end