Помогите оптимизировать запрос всех детей (ActiveRecord / Ruby / Rails) - PullRequest
1 голос
/ 31 августа 2011

Это просто быстрый вопрос производительности в запросе sql с использованием ruby ​​и rails.

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

К сожалению, это невероятно медленно, и мне было интересно, есть ли какая-то помощь в его оптимизации.

 @parents = Parent.where(:parent_id => 3) #This is passed in from params

 @childrenArray =[]
    @parents.each_with_index do |parent, index|
      #TOOSLOW
      @childrenArray[index] = Child.find(:all,:order=>"id",:conditions =>{:parent_ID=> parent.id})
  end

Одна вещь, которую я подумал, возможно, я должен сделать массив всех родительских идентификаторов дляискать и затем делать что-то вроде

child.find_by_parent_ID (myarrayofnumbershere)

Однако я не знаю, будет ли это лучше.

Любая помощь или совет приветствуются.


Я очень плохо знаком с SQL и ruby.Я знаю, что объединение таблиц было бы идеальным здесь, но я думаю, что немного опоздал в своем развитии, чтобы попробовать это сейчас.Также мне нужно обслуживать до 2 отдельных массивов.один из родителей и один из детей.

1 Ответ

1 голос
/ 31 августа 2011

Попробуйте использовать метод include, например:

@parents = Parent.where(:parent_id => 3).include(:children)

Теперь rails будет получать связанные дочерние элементы, и вы сможете перебирать @parents и получать доступ к их дочерним элементам без дополнительных запросов, например:

@parents.each do |p|
  puts "#{p}'s children: #{p.children}"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...