get todos os produtos da categoria e categorias filho (trilhos, awesome_nested_set)
tendo um aplicativo de comércio eletrônico em desenvolvimento, estou tentando entender meu problema: Tenho minhas categorias realizadas através do plugin awesome_nested_set. Se eu listar meus artigos selecionando uma categoria, tudo funcionará bem, mas para alguns links, quero mostrar todos os produtos de uma categoria e os produtos de suas categorias filh
aqui é o código do controlador que funciona bem com apenas uma categoria:
# 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
A linha que comentei é um método auxiliar que me escrevi no modelo de categoria que retorna todos os produtos da categoria e suas categorias filho em uma matri
É definido da seguinte forma:
# app/models/category.rb
def product_list
self_and_ancestors.to_a.collect! { |x| x.products }
end
Agora, quando descomentar esta linha e tentar selecionar uma categoria, meu código de controlador de produtos quebra com erros como
undefined method `order' for #<Array:0x1887c2c>
o
undefined method `page' for #<Array:0x1887c2c>
porque estou usando pedidos e paginação e ele não pode mais solicitar o arar
Alguma idéia de como obter todos os produtos em um elemento de relação ActiveRecord no meu controlador? obrigad
ATUALIZA
so quando uso o seguinte:
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
e peça ao controlador@category.all_products
Estou tendo o erro a seguir
Mysql::Error: Unknown column 'products.category_id' in 'where clause': SELECT `products`.* FROM `products` WHERE `products`.`category_id` IN (6, 8, 9)
Como obter todos os produtos com esta constelação?
UPDATE 2
Ok, então eu vou começar uma recompens
Se eu tentar:
def all_products Categorization.find (: all,: conditions => {: category_id => branch_ids}) end
Eu recebo novamenteundefined method
order 'para # `Preciso saber como obter todos os produtos de uma relação many_to_many como uma relação ActiveRecord.
UPDATE 3
Eu coloquei o código relevante em uma essênciahttps: //gist.github.com/121123