Ruby / Rails - Как я могу добавлять элементы в объект с каждой итерацией цикла - PullRequest
1 голос
/ 14 января 2011

Я пытаюсь понять немного больше рубина .....

Если у меня есть объект

 @Trees =  Tree.find( :all )

Затем сделайте цикл, где для каждого дерева, которое я найду, добавьте несколько яблок ...

 for tree in @trees   
     @apples = Apple.where(:tree_location = > tree.id )
 end

Как добавить дополнительные яблоки, найденные в каждой итерации цикла, к начальному объекту @apples?

Я пытался

    @apples = @apples + Apple.where(:tree_location = > tree.id )

но получил ошибку "не могу преобразовать Apple в массив"

Спасибо за помощь .... я нахожусь на крайнем сроке сидра смеется, банально я знаю

Ответы [ 3 ]

2 голосов
/ 14 января 2011

Если вы хотите, чтобы все яблоки были на всех деревьях, вам нужно взглянуть на следующий запрос:

@trees =  Tree.find( :all )
@apples = Apple.where(:tree_location => trees.map(&:id))

генерирует следующий sql

select * from apples where tree_location in (... tree ids ...);

это даст вам все яблоки, которые принадлежат деревьям, и стоит всего два запроса вместо n + 1

1 голос
/ 14 января 2011

Вы можете добавить «все» в конце:

@apples = @apples + Apple.where(:tree_location = > tree.id ).all
0 голосов
/ 14 января 2011

Не совсем уверен, что я вас понял, но ...

trees =  Tree.find( :all )
apples = []
trees.each do |tree|
  apples << Apple.where(:tree_location = > tree.id ).to_a
end

apples = apples.flatten.uniq!

puts apples.inspect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...