#ruby-on-rails
#ruby-on-rails
Вопрос:
Я работаю в приложении rails, основными пунктами которого являются статьи и продукты. Кто-то реализовал категории для статей.
class ArticleCategory < MainSchemaBase
belongs_to :user
has_many :articles, :through => :article_category_articles, :conditions => 'articles.deleted_at IS NULL'
has_many :article_category_articles, :conditions => 'article_category_articles.deleted_at IS NULL'
И меня попросили сделать в основном то же самое для продуктов.
Конечно, я хочу высушить, но продукты принадлежат бренду, а не пользователю, и у меня много продуктов вместо многих статей
Модель почти пуста (некоторые именованные области), контроллер и представления также сильно зависят от контекста (статья)
Может ли это быть СУХИМ? Или я должен просто скопировать реализацию?
Ответ №1:
Сделайте это полиморфным: я думаю, лучший способ — установить полиморфное отношение «многие ко многим», используя has_many_polymorphs (https://github.com/Nielsomat/has_many_polymorphs ) чтобы к продукту и статье можно было применить одну категорию.
class Category
#doesn't have any association fields
has_many_polymorphs :categorizables, :from => [:products, :articles], :through => :categorizations, :dependent => :destroy
end
class Categorization < ActiveRecord::Base
#has fields categorizable_id, categorizable_type, :category_id
belongs_to :categorizable, :polymorphic => true
belongs_to :category
end
class Product < ActiveRecord::Base
#doesn't need anything to set up the association
end
class Article < ActiveRecord::Base
#doesn't need anything to set up the association
end
«Категоризируемый» — это слишком многословно, но на самом деле вы не будете его использовать. Вы будете говорить @product.categories
или @category.articles
и т.д.
Комментарии:
1. Я не пробовал это, но совет по polymorphs позволил мне обнаружить много интересных вещей. Поэтому я дам этот ответ как достаточно хороший 🙂
2. @jordi не могли бы вы поделиться подходом, который вы использовали для этого, пожалуйста? спасибо!