【发布时间】:2011-09-07 10:57:42
【问题描述】:
有一个电子商务应用程序正在开发中,我试图解决以下问题: 我通过 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 关系元素中获取所有产品? 谢谢
更新
所以,当我使用以下内容时:
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
好的,所以我要开始赏金了。
如果我尝试:
定义所有产品 Categorization.find(:all, :conditions => { :category_id => branch_ids } ) 结束
我再次收到undefined methodorder' 的#`
我需要知道如何将 many_to_many 关系的所有乘积作为 ActiveRecord 关系。
更新 3
我把相关代码放在一个要点中 https://gist.github.com/1211231
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord nested-sets