Мне интересно, как я могу справиться со следующей ситуацией:
Page
имеет_много Assets
Stylesheet
имеет_много Assets
Javascript
имеет_много Assets
Теперь я хочу иметь возможность выполнять следующие запросы:
Page.first.assets
# показывает все активы (таблицы стилей и javascripts) для этой страницы
Page.first.assets.javascripts
# показывает все активы javascript для этой страницы (то же самое для таблиц стилей)
Javascript.first.pages
# показывает все страницы, которые включают этот javascript (то же самое для таблиц стилей)
В настоящее время у меня есть эта установка:
Assets:
stylesheet_id
javascript_id
page_id
belongs_to :stylesheet
belongs_to :javascript
belongs_to :page
scope :stylesheets, where{ stylesheet_id != nil } ###
scope :javascripts, where{ javascript_id != nil } # uses "squeel" gem
Pages:
has_many :assets
has_many :stylesheets, through: :assets
has_many :javascripts, through: :assets
Stylesheets/Javascripts:
content (text field)
has_many :assets
has_many :pages, through: :assets
Проблема не в том, что это не работает
Однако мне кажется, что это неправильный путь, потому что у меня есть три поля *_id
в модели Assets
. javascript_id
, stylesheet_id
и page_id
. В этой ситуации с каждой строкой либо javascript_id
, либо stylesheet_id
будет пусто, что мне кажется запахом кода.
Любые предложения, как справиться с этой ситуацией?