Что такое хороший способ иметь дело с категориями в приложении рельсов? - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь разобраться, как справляться с моим отношением товаров <-> к категориям.Я пытаюсь построить небольшой магазин на рельсах и хочу сделать навигацию из дерева категорий.

Навигация будет выглядеть примерно так:

- 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

Кроме того, я хочу иметь несколько категорий в своих продуктах и, возможно, сделать возможным создание новых категорий "на лету" при добавлении продукта.Таким образом, управление всей категорией должно быть максимально простым.Если кто-то может указать мне правильное направление или связать меня с учебником, лучшая практика или что-нибудь еще будет действительно потрясающим!создавая категории на лету, используя виртуальные атрибуты , вопрос заключается в том, как искать статьи определенной категории?

Что я пробовал:

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

или

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

но оба не работали.в основном я хочу все продукты одной категории ...

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Так что я в итоге создал отношение многие ко многим посредством категоризаций. Это 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 голосов
/ 28 июня 2011

Вы можете разрешить пользователям создавать новые категории одновременно с созданием новых продуктов, используя accepts_nested_attributes_for в вашей модели. Для начала ознакомьтесь с документацией.

...