2011-06-28 43 views
0

我想讓我的腦袋周圍如何處理我的產品< - >類別關係。 我正在嘗試在rails中構建一個小商店,並且我想從類別樹中進行導航。在rails應用程序中處理類別的好方法是什麼?

導航將是這個樣子:

- Men 
|--Shirts 
|--Pants 
- Woman 
|--Shirts 
|--Dresses 
-Accessoires 

你的想法...

現在的問題是,這些似乎是在同一個模型,產品所有不同的範圍,在關聯的類別上具有不同的查找條件。

我的車型至今:

class Product < ActiveRecord::Base 
    # validations... 
    has_many :categorizations 
    has_many :categories, :through => :categorizations 
    # more stuff ... 
end 

class Category < ActiveRecord::Base 
    acts_as_nested_set 
    has_many :categorizations 
    has_many :products, :through => :categorizations 
end 

class Categorization < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :category 
end 

另外,我想對我的產品多個類別,也許有可能創造新的類別添加產品時「上即時」。所以整個類別管理應該儘可能簡單。如果有人能指引我正確的方向,或者將我與教程聯繫起來,那麼最佳實踐或任何事情都會非常棒!

UPDATE

好了,現在我可以用virtual attributes動態創建類,問題是我如何搜索特定類型的文章?

我試了一下:

@products = Product.scoped(:include => :categorizations, :conditions => {:category_names => params[:category]}) 

@products = Product.where("categorization = ?", params[:category]) 

但都沒有工作。基本上我想要一個類別的所有產品...

回答

0

所以我最終通過分類創建了一個多對多的關係。這railscast完美解釋如何做到這一點,並創建新的類別(或標籤)。

後,我遍歷類別,使他們在我的產品概述鏈接:

# app/views/products/index.html.erb 
<ul class="categories"> 
    <% for category in @categories %> 
     <li><%= link_to category.name, :action => "index" , :category => category.id %></li> 
    <% end %> 
    </ul> 

,然後在控制器我打造的產品從類別是否有任何:

# products_controller.rb 
    def index 
    if params[:category] 
     @products = Category.find(params[:category]).products 
    else 
     @products = Product.scoped 
    end 
    @products = @products.where("title like ?", "%" + params[:title] + "%") if params[:title] 
    @products = @products.order('title').page(params[:page]).per(params[:per_page] ? params[:per_page] : 25) 
    @categories = Category.all 
    end 

肯定有一個更優雅的方式來做到這一點,但現在這個崇拜..任何改善表示讚賞。

0

您可以允許用戶在模型中使用accepts_nested_attributes_for創建新產品的同時創建新類別。通過文檔來看看你的入門。

相關問題