con un'applicazione di e-commerce in fase di sviluppo sto cercando di capire il seguente problema: Ho le mie categorie realizzate tramite il plugin awesome_nested_set. Se elenco i miei articoli selezionando una categoria, tutto funziona correttamente, ma per alcuni collegamenti voglio mostrare tutti i prodotti di una categoria e i prodotti delle sue categorie figlio.ottenere tutti i prodotti di categorie e categorie figlio (rails, awesome_nested_set)
qui è il codice di controllo che funziona bene con una sola 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
La linea ho commentato fuori è un metodo di supporto me stesso ho scritto nel modello di categoria che restituisce tutti i prodotti della categoria e del suo bambino categorie in un array.
Essa è definita come segue:
# app/models/category.rb
def product_list
self_and_ancestors.to_a.collect! { |x| x.products }
end
Ora, quando ho Decommentare questa linea e cerco di selezionare le pause di codice una categoria miei prodotti controller con errori come
undefined method `order' for #<Array:0x1887c2c>
o
undefined method `page' for #<Array:0x1887c2c>
perché sto usando l'ordinamento e l'impaginazione e non può più ordinare l'arario.
Qualche idea su come ottenere tutti i prodotti in un elemento di relazione ActiveRecord nel mio controller? grazie
UPDATE
così, quando uso il seguente:
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 chiedere al controllore per @category.all_products
ottengo il seguente errore:
Mysql::Error: Unknown column 'products.category_id' in 'where clause': SELECT `products`.* FROM `products` WHERE `products`.`category_id` IN (6, 8, 9)
come farei ottenere tutti i prodotti con questa costellazione?
UPDATE 2
Ok, quindi ho intenzione di iniziare una taglia.
se provo:
def all_products Categorization.find (: all,: condizioni => {: category_id => branch_ids}) fine
ottengo di nuovo undefined method
ordine' per # ` Ho bisogno di sapere come posso ottenere tutti i prodotti di una relazione many_to_many come una relazione ActiveRecord.
UPDATE 3
ho messo il codice in questione in un gist https://gist.github.com/1211231
questo mi dà un errore di sintassi .. . "/Users/frankblizzard/Sites/rails_projekte/sotaca/app/models/product.rb:56: errore di sintassi, imprevisto '}', in attesa di tASSOC scoped.joins (: categorizzazioni => {: categoria}). Dove ([" – tmaximini
wait - penso che funzioni ora (rimosso le parentesi graffe intorno: categoria) - testerà in profondità ora – tmaximini
ok funziona così lontano - l'unico risultato è che ora alcuni articoli appariranno due volte - se ne hanno due categorie figlio associate, ad esempio: so che esiste il metodo "uniq" che risolve i duplicati, ma poi di nuovo ".order" e "paginate" non funzioneranno, dato che trasformano la relazione ActiveRecord in una matrice. gestire i duplicati con questo approccio? – tmaximini