2011-06-28 46 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创建新产品的同时创建新类别。通过文档来看看你的入门。

相关问题