有一個電子商務應用程序正在開發中我試圖讓我的頭圍繞以下問題: 我通過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