в моем приложении у меня есть модели товара, категория и категоризации определяется как выше:Rails: применяются, когда условия для обеих моделей и ассоциаций
class Item < ActiveRecord::Base
attr_accessible :name, :description, :property_valuations, :barcode
has_many :categorizations
has_many :categories, :through => :categorizations
end
class Category < ActiveRecord::Base
attr_accessible :name, :description, :parent, :children, :items, :parent_id
has_many :children, :class_name => "Category", :foreign_key => "parent_id", :dependent => :nullify
belongs_to :parent, :class_name => "Category"
has_many :categorizations
has_many :items, :through => :categorizations
def all_children(children_array = [])
children = Category.where(:parent_id => self.id).includes(:items)
children_array += children.all
children.each do |child|
children_array = child.all_children(children_array)
end
children_array
end
end
class Categorization < ActiveRecord::Base
attr_accessible :category, :item
belongs_to :category
belongs_to :item
end
Я искать дерево категорий рекурсивно для элементов, связанных с категориями. Однако, помимо фильтрации категорий по parent_id, я хочу применить имя элемента фильтра. Как я могу это сделать (я ожидал чего-то вроде Category.where(:parent_id => self.id).includes(:items).where(:name => 'something...')
)?
Заранее благодарен!
Разве это не только предметы, связанные с категориями, которые являются прямыми детьми выбранной категории? – elc
Это получает категории, связанные с предметами, которые вы ищете, и когда вы проверяете элементы каждой категории, они получают только те элементы, которые соответствуют критериям. Какой результат вы хотите получить? Его непонятно (по крайней мере для меня) на вопрос. – rorra
Предполагая, что вы хотите проверить все идентификаторы вашего all_children, если вы создадите массив all_children_ids, то вы можете найти (all_children_ids), и это приведет к эффективному «Найти xx в» sql вместо повторяющихся запросов, если вы нажмете идентификатор отдельно. – elc