Получить все продукты категории и категории детей (рельсы, awesome_nested_set)

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

вот код контроллера, который прекрасно работает только с одной категорией:

   # products_controller.rb
   def index
    if params[:category]
      @category = Category.find(params[:category])
      #@products = @category.product_list
      @products = @category.products
    else
      @category = false
      @products = Product.scoped
    end
    @products = @products.where("title like ?", "%" + params[:title] + "%") if params[:title]
    @products = @products.order("created_at).page(params[:page]).per( params[:per_page] ? params[:per_page] : 25)
    @categories = Category.all
  end

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

Он определяется следующим образом:

# app/models/category.rb
def product_list
  self_and_ancestors.to_a.collect! { |x| x.products }
end

Теперь, когда я расстегнул эту строку и попытался выбрать одну категорию, код контроллера моих товаров разбивается с ошибками типа

undefined method `order' for #

или

undefined method `page' for #

, потому что я использую упорядочивание и пагинацию, и он больше не может упорядочивать арии.

Есть идеи, как получить все продукты в элементе ActiveRecord Relation в моем контроллере? спасибо

UPDATE

так что когда я использую следующее:

class Category < ActiveRecord::Base
    acts_as_nested_set

    attr_accessible :name, :description, :lft, :rgt, :parent_id   

    has_many :categorizations
    has_many :products, :through => :categorizations

    attr_accessor :product_list

    def branch_ids
      self_and_descendants.map(&:id).uniq 
    end

    def all_products
       Product.find(:all, :conditions => { :category_id => branch_ids } )
    end


end

и попрошу контроллер @category.all_products я получу следующую ошибку:

Mysql::Error: Unknown column 'products.category_id' in 'where clause': SELECT `products`.* FROM `products` WHERE `products`.`category_id` IN (6, 8, 9)

Как я получу все продукты с этим созвездием?

UPDATE 2

Хорошо, итак я начну получать вознаграждение.

Если я попытаюсь:

def all_products Categorization.find(:all, :conditions => { :category_id => branch_ids })) end

I get again undefined methodorder' for #'. Мне нужно знать, как я могу получить все продукты с отношением many_to_many в качестве ActiveRecord.

UPDATE 3

Я помещаю соответствующий код в суть. https://gist.github.com/1211231

8
задан tmaximini 12 September 2011 в 13:22
поделиться