obtenga todos los productos de categoría y categorías secundarias (rails, awesome_nested_set)
teniendo una aplicación de comercio electrónico en desarrollo, estoy tratando de entender el siguiente problema: tengo mis categorías realizadas a través del plugin awesome_nested_set. Si enumero mis artículos seleccionando una categoría, todo funciona bien, pero para algunos enlaces quiero mostrar todos los productos de una categoría y los productos de sus categorías secundarias.
aquí está el código del controlador que funciona bien con solo una categoría:
# 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
La línea que comenté es un método auxiliar que escribí yo mismo en el modelo de categoría que devuelve todos los productos de la categoría y sus categorías secundarias en una matriz.
Se define como sigue:
# app/models/category.rb
def product_list
self_and_ancestors.to_a.collect! { |x| x.products }
end
Ahora cuando descomento esta línea e intento seleccionar una categoría, el código del controlador de mis productos se rompe con errores como
undefined method `order' for #<Array:0x1887c2c>
undefined method `page' for #<Array:0x1887c2c>
porque estoy usando el orden y la paginación y ya no puede ordenar el arary.
¿Alguna idea de cómo obtener todos los productos en un elemento de Relación ActiveRecord en mi controlador? Gracia
ACTUALIZA
so, cuando uso lo siguiente:
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
y pregunte al controlador por@category.all_products
Obtuve el siguiente error
Mysql::Error: Unknown column 'products.category_id' in 'where clause': SELECT `products`.* FROM `products` WHERE `products`.`category_id` IN (6, 8, 9)
¿Cómo obtendría todos los productos con esta constelación?
UPDATE 2
Ok, entonces voy a comenzar una recompensa.
Si lo intento:
def all_products Categorization.find (: all,: condition => {: category_id => branch_ids}) end
Yo vuelvoundefined method
order 'para # `Necesito saber cómo puedo obtener todos los productos de una relación many_to_many como una relación ActiveRecord.
UPDATE 3
Puse el código relevante en una esenciahttps: //gist.github.com/121123