разрабатывая приложение для электронной коммерции, я пытаюсь разобраться со следующей проблемой: мои категории реализованы с помощью плагина 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 #<Array:0x1887c2c>
или
undefined method `page' for #<Array:0x1887c2c>
потому что я использую упорядочивание и нумерацию страниц, и он больше не может упорядочить арены.
Есть какие-нибудь идеи, как получить все продукты в элементе ActiveRecord Relation в моем контроллере?спасибо
ОБНОВЛЕНИЕ
так, когда я использую следующее:
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)
Как получить все продукты с этим созвездием?
ОБНОВЛЕНИЕ 2
Хорошо, так что я собираюсь начать щедрость,
Если я попытаюсь:
def all_products Категоризация.find (: все,: условия => {: category_id => branch_ids}) end
Я получаю снова undefined method
order 'for # `Мне нужно знать, как я могу получить все продукты отношения many_to_many как отношения ActiveRecord.
ОБНОВЛЕНИЕ 3
Я поставил соответствующий кодв сущности https://gist.github.com/1211231