2012-08-14 90 views
3

我希望我更好地描述这一点,但它是我知道的最好的方法。我有两类汽车和颜色。每个人都可以通过CarColors的关联课彼此拥有许多关系。该协会建立正确我敢肯定这一点,但我似乎无法得到这个工作:Rails协会访问

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

@carlist.colors 

错误

@carlist[0].colors 

WORKS

我的问题是我怎么可以遍历@carlist没有声明一个成功的例子索引?下面是几件事情我已经试过这也失败:因为Car.includes(:colors).all返回汽车,而不是一个单一的汽车组成的数组

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

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

我认为你必须做一些与颜色,请尝试在每个块中打印它 @ carlist.each do | c | p c.colors end – 2012-08-14 14:41:00

+0

当你在做'@carlist.each_with_index do | c,i | c [i] .colors end'应该是'@carlist.each_with_index do | c,i | @carlist [i] .colors'结尾 – 2012-08-14 14:46:10

回答

1

你的第一个例子失败了,所以下面将失败,因为#colors没有为数组定义

@cars = Car.includes(:colors).all 
@cars.colors #=> NoMethodError, color is not defined for Array 

下面的工作,因为迭代器都将有车

@cars.each do |car| 
    puts car.colors # => Will print an array of color objects 
end 

的实例0也能发挥作用,但它是一个有点不同,作为第一个对象 是一样的每个循环车对象,第二个对象是指数

@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 
+0

它的'@cars [index] .colors'和'car == @cars [index]' – 2012-08-14 14:57:38

+0

@ShreyasAgarwal:谢谢,错过了那些! – 2012-08-14 14:58:34

+0

另外,仅仅为了迭代所有项目而使用'#all',这是一个糟糕的主意。 – Hauleth 2012-08-14 15:00:51