我正试图了解如何处理我的产品< - >类别关系。 我正在尝试在rails中建立一个小商店,我想从类别树中进行导航。
导航将如下所示:
- Men
|--Shirts
|--Pants
- Woman
|--Shirts
|--Dresses
-Accessoires
你明白了......
现在,问题是这些似乎是同一型号Product上的所有不同范围,在相关类别上具有不同的查找条件。
到目前为止我的模特:
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
此外,我希望在我的产品上有多个类别,并且可以在添加产品时“即时”创建新类别。所以整个类别管理应该尽可能简单。如果有人可以指出我正确的方向或链接我的教程,最佳做法或任何事情真的很棒!
更新
好的,现在我可以使用virtual attributes动态创建类别,问题是如何搜索特定类别的文章?
我尝试了什么:
@products = Product.scoped(:include => :categorizations, :conditions => {:category_names => params[:category]})
或
@products = Product.where("categorization = ?", params[:category])
但两者都没有用。基本上我想要一个类别的所有产品...
答案 0 :(得分:0)
您可以允许用户在模型中使用accepts_nested_attributes_for
创建新产品的同时创建新类别。请查看相关文档,以便开始使用。
答案 1 :(得分: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
可以肯定的是,有一种更优雅的方式可以做到这一点,但现在这种情况很糟糕。任何改善都会受到赞赏。