有一个电子商务应用程序正在开发中我试图让我的头围绕以下问题: 我通过awesome_nested_set插件实现了我的类别。 如果我通过选择一个类别列出我的文章,一切正常,但对于某些链接,我想显示一个类别的所有产品及其子类别的产品。得到类别和子类别的所有产品(rails,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
我注释掉该生产线是我写我自己的分类模型的辅助方法,它返回的类别和其子所有产品数组中的类别。当我取消这条线,并尝试选择一类我的产品控制器代码打破了这样的错误
undefined method `order' for #<Array:0x1887c2c>
或
undefined method `page' for #<Array:0x1887c2c>
# app/models/category.rb
def product_list
self_and_ancestors.to_a.collect! { |x| x.products }
end
现在:
它是作为遵循定义
,因为我正在使用排序和分页,它不能再订购。
任何想法如何获得我的控制器中的ActiveRecord关系元素中的所有产品? 感谢
UPDATE
所以,当我使用以下命令:
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
好了,我要开始一个赏金。
如果我尝试:
高清ALL_PRODUCTS Categorization.find(:全部:条件=> {:CATEGORY_ID => branch_ids}) 结束
我再次得到undefined method
秩序”为#` 我需要知道如何将一个many_to_many关系的所有产品作为一个ActiveRecord关系获得。
更新3
我把相关代码的要点 https://gist.github.com/1211231
这给我一个语法错误.. ./Users/frankblizzard/Sites/rails_projekte/sotaca/app/models/product.rb:56:语法错误,意外的'}',期待tASSOC scoped.joins(:categorizations => {:category})。where( [“ – tmaximini
等待 - 我认为它现在可以工作(去掉大括号左边的类别) - 现在将进行深入测试 – tmaximini
确定它的工作到目前为止 - 剩下的唯一问题是现在有些文章会显示两次 - 如果他们有两个例如,我知道有一种方法“uniq”,它可以整理出重复的内容,但是“.order”和“paginate”将不起作用,因为这会将ActiveRecord关系转化为一个数组。用这种方法处理重复? – tmaximini