3

我希望我能更好地描述这一点,但这是我所知道的最好的。我有两个班汽车和颜色。每个都可以通过关联类 CarColors 彼此拥有多个。关联设置正确我对此持肯定态度,但我似乎无法让它发挥作用:

@carlist = Cars.includes(:Colors).all

@carlist.colors

错误

@carlist[0].colors

作品

我的问题是如何在不像成功示例中那样声明索引的情况下迭代@carlist?以下是我尝试过的一些事情,但也失败了:

@carlist.each do |c|
c.colors
end

@carlist.each_with_index do |c,i|
c[i].colors
end
4

1 回答 1

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
于 2012-08-14T14:47:59.823 回答