tener 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.obtener todos los productos de categoría y categorías de niños (rieles, awesome_nested_set)
aquí es el código de controlador que funciona bien con una sola 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 Comenté a cabo es un método de ayuda que escribí yo mismo en la categoría de modelo que devuelve todos los productos de la categoría y su hijo categorías 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 me descomentar esta línea y tratar de seleccionar las pausas código de una categoría mis productos controlador con errores como
undefined method `order' for #<Array:0x1887c2c>
o
undefined method `page' for #<Array:0x1887c2c>
porque estoy usando el orden y la paginación y ya no puede ordenar el arario.
¿Alguna idea de cómo obtener todos los productos en un elemento Relación de ActiveRecord en mi controlador? gracias
ACTUALIZACIÓN
así, cuando utilizo el 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 pedir el controlador para @category.all_products
me sale 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 me obtener todos los productos con esta constelación?
ACTUALIZACIÓN 2
Ok, así que voy a empezar una recompensa.
si trato:
def all_products Categorization.find (: todos,: condiciones => {: category_id => branch_ids}) final
consigo de nuevo undefined method
fin' para `# Necesito saber cómo puedo obtener todos los productos de una relación many_to_many como una relación ActiveRecord.
ACTUALIZACIÓN 3
pongo el código en cuestión en una esencia https://gist.github.com/1211231
esto me da un error de sintaxis .. . "/Users/frankblizzard/Sites/rails_projekte/sotaca/app/models/product.rb:56: error de sintaxis, inesperado '}', esperando tASSOC scoped.joins (: categorizations => {: category}) where ([" – tmaximini
espera - creo que funciona ahora (eliminó las llaves alrededor de: categoría) - probará en profundidad ahora – tmaximini
vale, hasta ahora funciona - lo único que queda es que ahora algunos artículos aparecerán dos veces - si tienen dos categorías secundarias asociadas, por ejemplo. Sé que existe el método "uniq" que resolverá los duplicados, pero de nuevo ".order" y "paginate" no funcionarán, ya que estos convierten la relación ActiveRecord en una matriz. manejar duplicados con este enfoque? – tmaximini