Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Список джемов Rails проекты      Поиск   

Ruby On Rails in UA/Программирование на ROR/Сущности с разными подкатегориями в одну модель

2008-10-18 12:31:54 Ответить  
mihserf
Михаил Гаганов
Адрес: Украина. Крым. Севастополь
Сообщений: 17
Регистр: 2007-12-05
его блог 0 сообщ.
Сущности с разными подкатегориями в одну модель
  •  
Здравствуйте!
Посоветуйте как избавиться от создания модели для каждого курса.
Структура и проблема описаны ниже:

Есть школы, где проводятся курсы:
школа 1
школа 2
школы 3

Есть языковые курсы:
Академические
Семейные
и т.д.

У курсов есть подкатегории (но не у всех):
Например, для Академических подкатегории "учителя", "студенты" и т.д.
для Семейных нет подкатегорий.
И соответственно у курсов (или при наличии подкатегорий курсов, то у подкатегорий) есть школы, в которых проводят соответствующие курсы. Причём в одной школе могут проводиться несколько курсов (получается отношение многие-ко-многим)

Придумал только вариант с созданием модели для каждого курса (AcademicCourse, FamilyCourse), эти модели связаны с их подкатегориями, если есть (например, для AcademicCourse, has_many :student_types ), а подкатегории (или сразу курсы, у которых нет подкатегорий) связаны с полиморфной моделью-связкой SchoolCources (у которой belongs_to :teachable, :polymorphic => true и belongs_to :school)
Так вот, как можно обойти создание модели для каждого курса? Проблема в том, что у каждого курса могут быть подкатегории, а могут и не быть. А школы должны быть привязаны либо к курсам, либо к категориям, причём иногда сразу к нескольким.
2008-10-18 13:48:19 Ответить  
romb
Roman V. Babenko
Адрес: Kyiv
Сообщений: 311
Регистр: 2008-04-22
его блог 6 сообщ.
RE: Сущности с разными подкатегориями в одну модель
  •  
Не совем понятно, что значит подкатегории академических курсов: учетеля, студенты.
По какому признаку курс делиться на плдкатегории ?
------------
http://romanvbabenko.blogspot.com Если в споре не родилась истина, то, по крайней мере, один из спорящих бесплоден.
2008-10-18 14:35:29 Ответить  
mihserf
Михаил Гаганов
Адрес: Украина. Крым. Севастополь
Сообщений: 17
Регистр: 2007-12-05
его блог 0 сообщ.
RE: RE: Сущности с разными подкатегориями в одну модель
  •  
Курс может делиться по категориям только по индивидуальному признаку. Т.е., к примеру, у Академического курса могут быть подкатегории, а у Семейного курса может их не быть.

Если брать вариант когда каждый курс представляется отдельной моделью, то получается для академических курсов и для семейных курсов следующее:

class AcademicCourse < ActiveRecord::Base
has_many :student_types
end

class StudentType < ActiveRecord::Base
belongs_to :academic_course
has_many :school_cources, :as => :teachable
end

class FamilyCourse < ActiveRecord::Base
has_many :school_cources, :as => :teachable
end


class SchoolCource < ActiveRecord::Base
belongs_to :teachable, :polymorphic => true
belongs_to :school
end

class School < ActiveRecord::Base
has_many :school_cources
end

2008-10-18 14:48:23 Ответить  
romb
Roman V. Babenko
Адрес: Kyiv
Сообщений: 311
Регистр: 2008-04-22
его блог 6 сообщ.
RE: RE: RE: Сущности с разными подкатегориями в одну модель
  •  
Чем тебя не устроил вариант построить древовидную иерархию курсов и их категорий и связать has_many со школами через промежуточную таблицу.
Зачем вообще начал плодить модели курсов ?
------------
http://romanvbabenko.blogspot.com Если в споре не родилась истина, то, по крайней мере, один из спорящих бесплоден.
2008-10-18 17:03:04 Ответить  
mihserf
Михаил Гаганов
Адрес: Украина. Крым. Севастополь
Сообщений: 17
Регистр: 2007-12-05
его блог 0 сообщ.
RE: RE: RE: RE: Сущности с разными подкатегориями в одну модель
  •  
Верно, сделаю древовидной.
Совершенно забыл о дереве, не подумал о том, что категории можно сделать "детьми" курса-"родителя".

Дерево буду строить плагином BetterNestedSet. Хотя, конечно, дерево - штука прожорливая на обновлениях в плане загрузки базы, но в моём случае это не критично.

А идея плодить модели курсов появилась от того, что подкатегории не у всех курсов и, соответственно, хотел их(категории) делать тоже отдельными моделями.

Спасибо!
2008-10-18 18:52:23 Ответить  
romb
Roman V. Babenko
Адрес: Kyiv
Сообщений: 311
Регистр: 2008-04-22
его блог 6 сообщ.
RE: RE: RE: RE: RE: Сущности с разными подкатегориями в одну модель
  •  
Плодить модели есть смысл если их функиционал сильно отличается. В таком случае можно использовать STI(по ситуации если есть общий функционал), но тоже надо смотреть, чтобы не получить жесткую структуру с кучей полей.
Думаю, что acts_as_tree тебе вполне хватит. Дерево не прогрузит тебе сильно базу, потому как своих чаилдов грузит только по надобности(Lazy - ленивая загрузка).
------------
http://romanvbabenko.blogspot.com Если в споре не родилась истина, то, по крайней мере, один из спорящих бесплоден.
Назадназад Новыйновый Ответитьответить
Ключевые слова:
Гости: 97 Онлайн: Виктор ,
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008