Rails关联访问

时间:2012-08-14 14:33:19

标签: ruby-on-rails ruby

我希望我能更好地描述这一点,但这是我所知道的最好的。我有两个班级汽车和颜色。每个人都可以通过一个关联类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

1 个答案:

答案 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